您的位置:首页 > 财经 > 产业 > android进程调度,线程调度的使用总结

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

2024/12/23 12:22:12 来源:https://blog.csdn.net/ygn918042354/article/details/140153134  浏览:    关键词: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)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com