2.40 Android线程优先级
2.40.1 Linux线程优先级
-
Linux进程优先级 Linux进程优先级图 来源于杂谈Android线程优先级
- 静态优先级: 不会因为时间而修改, 内核也不会修改, 只能通过系统调用实时修改nice值的方法区修改。优先级映射公式: static_prio = MAX_RT_PRIO + nice + 20, 其中MAX_RT_PRIO为100, 则取值区间为[100, 139], 对应普通进程
- 实时优先级: 只对实时进程有意义, 取值区间为[0, MAX_RT_PRIO - 1], MAX_RT_PRIO为100, 则取值区间为[0, 99]
-
动态优先级: 调度程序通过增减或减少进程静态优先级的值, 来达到奖励IO消耗性或惩罚CPU消耗型进程, 调整后的进程称为动态优先级, 区间范围[0, MX_PRIO - 1], MX_PRIO为140
- adb shell ps -p -t -P可查看进程优先级
-
Thread#setPriority()
和Process#setThreadPriority()
的区别与联系Process#setThreadPriority
进程优先级 nice值 解释 THREAD_PRIORITY_LOWEST 19 最低优先级 THREAD_PRIORITY_BACKGROUND 10 后台 THREAD_PRIORITY_LESS_FAVORABLE 1 比默认优先级低 THREAD_PRIORITY_DEFAULT 0 默认 THREAD_PRIORITY_MORE_FAVORABLE -1 高于默认优先级 THREAD_PRIORITY_FOREGROUND -2 前台 THREAD_PRIORITY_DISPLAY -4 显示相关 THREAD_PRIORITY_URGENT_DISPLAY -8 显示(更为重要), input事件 THREAD_PRIORITY_AUDIO -16 音频相关 THREAD_PRIORITY_URGENT_AUDIO -19 音频(更为重要) Thread#setPriority()
, 优先级大于MIN_PRIORITY(1), 小于MAX_PRIORITY(10)Thread#setPriority
或Process#setThreadPriority
底层实现均通过修改进程的nice值Thread#setPriority
中[MAX_PRIORITY, MIN_PRIORITY]对应Nice值[-8, 19], 而Process#setThreadPriority
对应的线程优先级更细