性能优化之 线程优化
线程调度原理
在任意时刻,只有一个线程占用cpu,处于运行状态,在多线程并发的情况下,轮流使用CPU的使用权,但是现在是多核的时代, 比如现在很多电脑或者手机是8核的,意思是有8个cpu,让这8个cpu去执行任务,如果是执行任务很多的情况下,cpu是轮流的方式去执行任务的,而这个CPU去执行任务是由cpu去负责调度的,
线程调度模型
线程调度模型有二类
第一类:分时调度
第二类: 抢占式调度
在Java中是使用第二种方式
Android线程调度
也是分成二部分
第一:nice值,是在Process类中定义的 它的值越小 优化及越高
/*** Default scheduling policy* @hide*/public static final int SCHED_OTHER = 0;
这是Android中默认的优化线看看Android中默认的优先级有哪些:
第二:cgroup
更严格的群组调度策略,保证前台线程更多的获取cpu使用权
注意点
线程过多会导致CPU切换频繁,降低线程运行效率,
线程优先级具有继承性 , 比如我A线程优先级是5 B线程继承了A,如果没有设置优先级的话 那么B线程的优先级也是5
android 异步方式
1:new Thread的方式来创建线程,这个方式简单 但是在具体的项目不适合,因为这种方式创建线程不具备服用,而且线程的创建和销毁都是消耗资源,创建消耗内存资源
2:HandlerThread 自带消息循环的,它是串行执行,比较适合长时间执行,不断的从队列中获取任务
3:IntentService 它是继承了Service类 内部创建了HandlerThread,相对Service,IntentService是运行在异步线程,不占用主线程,不会阻塞UI线程的执行,还有它的优先级比Service高,不容易被系统Kill掉,
4:AsyncTask,这个基本用不到,但是里面的源码可以分析下,挺好的,在api14版本把之前的问题修复了
5:线程池,它的优点是线程能服用,减少了线程创建和销毁的时间,从而提高了效率,还有定时 队列优势,在网络框架和图片加载框架都会用到
6:Rxjava 中也提供了异步线程的操作
线程池合理配置线程数
这里指的配置线程数,是指线程池中的最大线程数,这个分情况, 看是IO密集型还是cpu密集型,比如网络网络请求
cpu密集型:cpu核数+1
io密集型:cpu核数*2+1
cpu的核数通过
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
获取,看下AsyncTask源码就知道了,
CPU密集型
CPU密集型会消耗掉大量的CPU资源,例如需要大量的计算,视频渲染啊,仿真啊之类的。这个时候CPU就卯足了劲在运行,这个时候切换线程,反而浪费了切换的时间,效率不高。
就像你的大脑是CPU,你本来就在一本心思地写作业,多线程这时候就是要你写会作业,然后立刻敲一会代码,然后在P个图,然后在看个视频,然后再切换回作业。emmmm,过程中你还需要切换(收起来作业,拿出电脑,打开VS…)那你的作业怕是要写到挂科。。。这个时候不太适合使用多线程,你就该一门心思地写作业~
IO密集型
涉及到网络、磁盘IO的都是IO密集型,这个时候CPU利用率并不高,这个时候适合使用多线程
性能优化之 线程优化相关推荐
- App性能优化(布局优化,线程优化,app瘦身优化,页面切换优化,App启动优化,内存优化)
Android APP性能优化(最新总结) 在目前Android开发中,UI布局可以说是每个App使用频率很高的,随着UI越来越多,布局的重复性.复杂度也随之增长,这样使得UI布局的优化,显得至关重要 ...
- Android性能优化系列:CPU收敛优化(线程优化)
文章目录 线程调度 线程调度的原理 线程调度模型 Android 的线程调度 线程调度小结 Android 异步方式汇总 Thread HandlerThread IntentService Asyn ...
- Android 性能优化之线程优化
Android线程调度机制 线程调度模型 分时调度模型: 所有的线程轮流获得CPU使用权,平均分配每个线程占用的cpu时间 抢占式调度模型(Android):优先让可运行池中的优先级高的线程占用cpu ...
- 线程 - 线程安全 - 线程优化
本文详尽的介绍了线程的相关知识,从概念到创建线程和其基本使用,又介绍了线程安全的相关知识,其中包含线程同步的四种实现方式与线程休眠的不同方式与其区别,最后介绍了线程优化包括线程优化.线程任务优化.锁优 ...
- Android App优化:内存优化、电量优化、网络优化等 (2)
-- 优化专题: 整理一系列的专题:比如APK瘦身.插件化.程序架构.性能优化.自定义view.增量升级.移动开发各种技术解决方案等. Android后期发展的五大趋势:一.性能优化:二.高级UI ...
- Java性能-线程和同步-JVM线程优化和线程优先级
线程和同步-JVM线程优化 优化线程栈大小 每个线程都有一个原生栈,操作系统会在这里存储线程的调用栈信息,如果空间不足可以通过调整线程使用的内存. 64位机器默认原生栈大小1MB 如果将线程栈设置的非 ...
- Android关于线程优化以及性能优化的一些建议
线程优化 线程优化的思想是采用线程池,避免程序中存在大量的Thread,线程池可以重用内部的线程,从而避免线程的创建或销毁带来的性能开销,同时线程池还能有效的控制最大并发数,避免大量的线程因为互相抢占 ...
- 【Android 性能优化】布局渲染优化 ( CPU 渲染优化 | 减少布局的嵌套 | 测量布局绘制时间 | OnFrameMetricsAvailableListener | 布局渲染优化总结 )
文章目录 一. 减少布局嵌套 二. 布局渲染时间测量 1. FrameMetrics 使用流程 2. FrameMetrics 参数解析 3. FrameMetrics 代码示例 三. 布局渲染优化总 ...
- java如何定义一个字符栈_Java性能优化之字符串优化处理
本文来源于: https://blog.csdn.net/xlgen157387/article/details/51870322 1.String对象 String对象是java中重要的数据类型,在 ...
最新文章
- python软件怎么用-用Python如何打出你的第一个程序
- asp.net窗体操作总结
- 《现代操作系统》(第4版)文件系统 课后习题解答
- 深度学习100例 - 常见错误 及 处理办法
- [CareerCup][Google Interview] 找出现次数
- java对密码进行加密的方法_如何在JAVA中使用MD5加密对密码进行加密
- react hooks_如何破坏React Hooks的基础
- 自定义注解判空简单示例
- 中国移动创新系列丛书《OPhone应用开发权威指南》读者交流活动
- 最强人工智能 OpenAI 极简教程
- 文本相似度计算-度量方法
- Ques核心思想——CSS Namespace
- TSO/GSO/LRO/GRO测试
- Linux平台串口读取GPS每次只能收到8个字节 以及 使用LiveGBS 调试 GB28181设备 包括视频 GPS信息等等
- 有没有谁做过完整的ptf上传下载
- 江苏成人高考考前注意事项
- 计算机专业修读指导论文,计算机专业网络与课堂教学整合
- mysql自我介绍_自我介绍
- xftp上传文件状态错误解决方法
- Windows Phone周岁背后的喜和忧