「性能优化3.0」Android线程调度&异步方式汇总

线程调度与线程调度模型

任意时刻,只有一个线程占用 CPU,处于运行状态。而多线程并发执行就是轮流获取 CPU 执行权。

  • 分时调用模型

轮流获取 CPU 执行权,均分 CPU 执行时间。

  • 抢占式调度模型

优先级高的线程优先获取 CPU 执行权,这也是 JVM 采用的线程调度模型。

nice value

nice value 表示进程的优先级,nice value 越小,线程优先级越高。这个值是在 Process 类中定义的。默认的 THREAD_PRIORITY_DEFAULT,值为0.

nice value

下面来关注一下哪些异步框架如何设置这些 nice value 。

  • HanlderThread
HandlerThread 默认优先级
  • AsyncTask
AsyncTask默认优先级

cgroup(control group)

借鉴了 Linux ,它是更严格的群组调度策略,保证前台进程获取更多的 CPU。那些手动设置优先级比较低的线程或者不在前台运行的应用程序的线程会被放入后台 group ,后台 group 也是可以被 CPU 调度运行,只是获取 CPU 执行权的概率会比较低,这样就不会影响到前台group 的运行。

所以说需要设置要对应的 nice value ,因为该值会影响到线程获取 CPU 执行权的概率。

CPU 密集型与 IO 密集型

CPU 密集型

大量的计算,消耗CPU资源,例如视频进行高清解码,为了重复利用 CPU 资源,应该将线程数量设置为CPU的核心数+1。

IO 密集型

网络、磁盘IO,这时线程大多数时间是阻塞等待 IO 完成的,因为 IO 操作是不占用 CPU 的,为了提高线程的利用率,尽可能的创建更多的任务,这样 CPU 的效率就越高,但是这个数量是有限制的,不能无限制大,线程数 = 2*CPU 核心数。

多线程优化的注意点

  • 线程具有继承性

在 UI 线程中如果创建子线程,那么该线程的优先级是和 UI 线程一样的,因此 UI 线程获取到 CPU 执行权的机率肯定会渐低。

  • 根据任务的性质来设置线程数量,具体参考上面的 CPU 密集型和 IO 密集型的知识点。

Android 的异步方式

  • 直接使用 Thread

这种方式是最简单的,但是也是最不推荐的方式,因为频繁的创建和销毁,增大了系统资源的开销,并且通过这种方式创建的线程无法得到控制,也不能被复用。

  • HandlerThread

内部结合了 Handler 和 Thread ,特点就是串行执行每一个任务。

  • IntentService

内部是使用 HandlerThread ,因此具备 HandlerThread 的特点,因为继承至 Service ,因此优先级比较高,不容易被系统杀死,它就相当于一个可以跑异步任务的 service 。

  • AsyncTask

内部提供了线程池,在异步任务执行前,执行中,执行完成都会相应的回调。

  • 线程池

Executors 工具类提供了很多系统内置好的线程池,当然也可以通过自己去配置线程池的参数。

  • RxJava

可以通过任务的类型,选择 CPU 密集型的还是 IO 密集型的线程池去执行。

参考

https://droidyue.com/blog/2015/09/05/android-process-and-thread-schedule-nice/

本文是笔者学习之后的总结,方便日后查看学习,有任何不对的地方请指正。

记录于 2019年4月16号

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容