android进程调度,线程调度的使用总结

关于android进程调度,线程调度的使用总结

一 java层的调用流程

上层关于调度主要用到的接口(ams,pms,SchedulingPolicyService等):
setThreadScheduler
setThreadGroupAndCpuset
setThreadGroup
setProcessGroup
setProcessFrozen
调用到native对应的实现:

android_os_Process_setProcessGroup//设置内部所有线程的sched
android_os_Process_setThreadGroup//设置线程的sched
android_os_Process_setThreadGroupAndCpuset
android_os_Process_setThreadGroupAndCpuset//设置单个线程的cpuset
调用到libprocessgroup库 对应的接口:SetTaskProfiles
这里分别对应的是修改 sche:调度策略系统 和 cpuset:资源分配系统
即调用AddTidToCgroup将线程号写到对应的fd里面去
setProcessFrozen 对应的是freezer子系统 就是直接调用AddTidToCgroup将线程号写到对应的fd里面去
io相关的一个没有,这里有欠缺,可考虑增加对于的子系统的支持

二 native层的调用流程

native往往直接用set_sched_policy,set_cpuset_policy ->SetTaskProfiles来设置(surfaceflinger,audiotrack等等)


三 两个系统的说明

sched系统是一种调度策略:一个是按优先级划分不同等级的规则算法
cpuset是一个cgroup子系统:一个资源限制或隔离系统,一个是按文件夹方式隔离,分配cpu和内存,io等资源。
setThreadScheduler和 另一个接口:setThreadPriority功能比较相似, setThreadScheduler主要是用来调整几个调度策略的等级(实时与非实时的调整),不同等级对应不同区间的nice值
setThreadPriority 主要是调整 普通线程的nice值

具体的两个系统划分等级:

     *  cpuset profile array for:
     *  SP_DEFAULT(-1), SP_BACKGROUND(0), SP_FOREGROUND(1),
     *  SP_SYSTEM(2), SP_AUDIO_APP(3), SP_AUDIO_SYS(4),
     *  SP_TOP_APP(5), SP_RT_APP(6), SP_RESTRICTED(7)
     
     
     *  sched profile array for:
     *  SP_DEFAULT(-1), SP_BACKGROUND(0), SP_FOREGROUND(1),
     *  SP_SYSTEM(2), SP_AUDIO_APP(3), SP_AUDIO_SYS(4),
     *  SP_TOP_APP(5), SP_RT_APP(6), SP_RESTRICTED(7)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值