Thread优先级设置方式:
java:
Process.setThreadPriority: android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_LOWEST、Process.THREAD_PRIORITY_URGENT_AUDIO、-20)
c++:
#include <sched.h>
setpriority(
https://blog.csdn.net/yangming2466/article/details/83280643
Linux进程优先级系统——设置实时进程优先级_schedule里面priority 0-CSDN博客
Thread优先级原理(Android)
priority和nice关系:PR(NI+20):将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39
- main,renderthread 在app启动过程修改优先级源码:
|
- 可控制不继续设置线程优先级:android.os.Process.setCanSelfBackground(false 作用是不让后面再有线程将优先级设置为background-level的行为,如有设置则直接抛出异常)
Scheduler 调度
调度算法分3大类:
SCHED_OTHER 默认调度策略线程优先级100~120
SCHED_FIFO 线程优先级11~99
SCHED_RR
其中 RR+FIFO 是实时线程优先级,它们之间的区别是RR在相同优先级的线程之间会公平轮询,FIFO会独占CPU直到阻塞为止
修改方法:
Process.setThreadScheduler(tid, Process.SCHED_FIFO,1)
Process.setThreadScheduler(tid, Process.SCHED_RR | Process.SCHED_RESET_ON_FORK
说明:
不加Process.SCHED_RESET_ON_FORK,Process所有线程会被设置成RR
加上Process.SCHED_RESET_ON_FORK,指定线程会被设置成RR
Android的schedule包含4个cgroups:foreground,background,top-app,rt
线程绑定核心实现方案:
Process.setThreadGroupAndCpuset(renderThreadTid, 8)
Android中cpuset包含5个cgroups:foreground,background,system-background,restricted,top-app