2.40 Android线程优先级

less than 1 minute read

2.40.1 Linux线程优先级

  • Linux进程优先级 Linux进程优先级图 来源于杂谈Android线程优先级 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#setPriorityProcess#setThreadPriority底层实现均通过修改进程的nice值
    • Thread#setPriority中[MAX_PRIORITY, MIN_PRIORITY]对应Nice值[-8, 19], 而Process#setThreadPriority对应的线程优先级更细

参考