线程调度原理

在任意时刻,只有一个线程占用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利用率并不高,这个时候适合使用多线程

性能优化之 线程优化相关推荐

  1. App性能优化(布局优化,线程优化,app瘦身优化,页面切换优化,App启动优化,内存优化)

    Android APP性能优化(最新总结) 在目前Android开发中,UI布局可以说是每个App使用频率很高的,随着UI越来越多,布局的重复性.复杂度也随之增长,这样使得UI布局的优化,显得至关重要 ...

  2. Android性能优化系列:CPU收敛优化(线程优化)

    文章目录 线程调度 线程调度的原理 线程调度模型 Android 的线程调度 线程调度小结 Android 异步方式汇总 Thread HandlerThread IntentService Asyn ...

  3. Android 性能优化之线程优化

    Android线程调度机制 线程调度模型 分时调度模型: 所有的线程轮流获得CPU使用权,平均分配每个线程占用的cpu时间 抢占式调度模型(Android):优先让可运行池中的优先级高的线程占用cpu ...

  4. 线程 - 线程安全 - 线程优化

    本文详尽的介绍了线程的相关知识,从概念到创建线程和其基本使用,又介绍了线程安全的相关知识,其中包含线程同步的四种实现方式与线程休眠的不同方式与其区别,最后介绍了线程优化包括线程优化.线程任务优化.锁优 ...

  5. Android App优化:内存优化、电量优化、网络优化等 (2)

    -- 优化专题: 整理一系列的专题:比如APK瘦身.插件化.程序架构.性能优化.自定义view.增量升级.移动开发各种技术解决方案等.   Android后期发展的五大趋势:一.性能优化:二.高级UI ...

  6. Java性能-线程和同步-JVM线程优化和线程优先级

    线程和同步-JVM线程优化 优化线程栈大小 每个线程都有一个原生栈,操作系统会在这里存储线程的调用栈信息,如果空间不足可以通过调整线程使用的内存. 64位机器默认原生栈大小1MB 如果将线程栈设置的非 ...

  7. Android关于线程优化以及性能优化的一些建议

    线程优化 线程优化的思想是采用线程池,避免程序中存在大量的Thread,线程池可以重用内部的线程,从而避免线程的创建或销毁带来的性能开销,同时线程池还能有效的控制最大并发数,避免大量的线程因为互相抢占 ...

  8. 【Android 性能优化】布局渲染优化 ( CPU 渲染优化 | 减少布局的嵌套 | 测量布局绘制时间 | OnFrameMetricsAvailableListener | 布局渲染优化总结 )

    文章目录 一. 减少布局嵌套 二. 布局渲染时间测量 1. FrameMetrics 使用流程 2. FrameMetrics 参数解析 3. FrameMetrics 代码示例 三. 布局渲染优化总 ...

  9. java如何定义一个字符栈_Java性能优化之字符串优化处理

    本文来源于: https://blog.csdn.net/xlgen157387/article/details/51870322 1.String对象 String对象是java中重要的数据类型,在 ...

最新文章

  1. python软件怎么用-用Python如何打出你的第一个程序
  2. asp.net窗体操作总结
  3. 《现代操作系统》(第4版)文件系统 课后习题解答
  4. 深度学习100例 - 常见错误 及 处理办法
  5. [CareerCup][Google Interview] 找出现次数
  6. java对密码进行加密的方法_如何在JAVA中使用MD5加密对密码进行加密
  7. react hooks_如何破坏React Hooks的基础
  8. 自定义注解判空简单示例
  9. 中国移动创新系列丛书《OPhone应用开发权威指南》读者交流活动
  10. 最强人工智能 OpenAI 极简教程
  11. 文本相似度计算-度量方法
  12. Ques核心思想——CSS Namespace
  13. TSO/GSO/LRO/GRO测试
  14. Linux平台串口读取GPS每次只能收到8个字节 以及 使用LiveGBS 调试 GB28181设备 包括视频 GPS信息等等
  15. 有没有谁做过完整的ptf上传下载
  16. 江苏成人高考考前注意事项
  17. 计算机专业修读指导论文,计算机专业网络与课堂教学整合
  18. mysql自我介绍_自我介绍
  19. xftp上传文件状态错误解决方法
  20. Windows Phone周岁背后的喜和忧

热门文章

  1. AT32F421在GPIO高频输出时存在过冲现象
  2. 统计学习与方法实战——统计学习方法概论
  3. 进销存管理系统源码|ERP源码开发
  4. d2admin框架学习
  5. 树莓派4B-Python-四种人脸检测/人脸识别
  6. 内存条:程序运行中内存的作用以及如何与cpu、os交互
  7. C#中int、long、float、double、decimal最大值最小值
  8. 搭建网站/APP最全准备攻略
  9. python 变量 r_在python中为每个预测变量调整R平方
  10. 禁止复制粘贴(electron、vue)