安卓系统中线程优先级Priority查看方式汇总

背景:

在audio相关模块开发时候,会有遇到一些优先级比较高的线程比如快速混音线程FastMixer,但是这个快速混音中的快到底是如何体现的呢?其实有一个部分就是线程的优先级,优先级直接会影响线程的cpu获取情况,本文主要来给大家讲解一下如何获取查看系统中相关线程的优先级情况。

adb shell查看线程优先级方式:

查看某个进程各个线程的优先级情况

top -H -p 1014

bash 复制代码
Threads: 18 total,   0 running,  18 sleeping,   0 stopped,   0 zombie
  Mem:  2728512K total,  2675760K used,    52752K free,    52092K buffers
 Swap:   524284K total,        0K used,   524284K free,  1206072K cached
400%cpu   0%user   0%nice 150%sys 250%idle   0%iow   0%irq   0%sirq   0%host
  TID USER         PR  NI VIRT  RES  SHR S[%CPU] %MEM     TIME+ THREAD          PROCESS                                                                                                                    
 3811 audioserver  20   0  11G  22M  16M S  0.0   0.8   0:00.19 binder:1014_5   audioserver
 2886 audioserver  20   0  11G  22M  16M S  0.0   0.8   0:00.46 binder:1014_4   audioserver
 2007 audioserver  20   0  11G  22M  16M S  0.0   0.8   0:00.32 binder:1014_3   audioserver
 1918 audioserver   1 -19  11G  22M  16M S  0.0   0.8   0:00.13 AudioOut_2D     audioserver
 1917 audioserver  -4 -19  11G  22M  16M S  0.0   0.8   0:00.00 FastMixer       audioserver
 1909 audioserver   1 -19  11G  22M  16M S  0.0   0.8   0:00.07 AudioOut_15     audioserver
 1906 audioserver  -4 -19  11G  22M  16M S  0.0   0.8   0:03.11 FastMixer       audioserver
 1907 audioserver   1 -19  11G  22M  16M S  0.0   0.8   0:01.04 AudioOut_D      audioserver
 1908 audioserver  20   0  11G  22M  16M S  0.0   0.8   0:00.00 HwBinder:1014_3 audioserver
 1905 audioserver  20   0  11G  22M  16M S  0.0   0.8   0:00.03 TimerThread     audioserver
 1342 audioserver   4 -16  11G  22M  16M S  0.0   0.8   0:00.00 ApmAudio        audioserver
 1343 audioserver   4 -16  11G  22M  16M S  0.0   0.8   0:00.77 ApmOutput       audioserver
 1106 audioserver   4 -16  11G  22M  16M S  0.0   0.8   0:00.00 AudioFlinger_Pa audioserver
 1102 audioserver  20   0  11G  22M  16M S  0.0   0.8   0:00.00 HwBinder:1014_2 audioserver
 1099 audioserver  20   0  11G  22M  16M S  0.0   0.8   0:00.00 HwBinder:1014_1 audioserver
 1067 audioserver  20   0  11G  22M  16M S  0.0   0.8   0:00.43 binder:1014_2   audioserver
 1066 audioserver  20   0  11G  22M  16M S  0.0   0.8   0:00.04 binder:1014_1   audioserver
 1014 audioserver  20   0  11G  22M  16M S  0.0   0.8   0:00.81 audioserver     audioserver

这里主要看到 PR NI这两个值。

chrt -p 1906查看具体的scheduling

bash 复制代码
130|gemini:/ # chrt -p 1906
pid 1906's current scheduling policy: SCHED_FIFO
pid 1906's current scheduling priority: 3
gemini:/ # chrt -p 1014                                                                                                                                                                                   
pid 1014's current scheduling policy: SCHED_OTHER
pid 1014's current scheduling priority: 0
gemini:/ # 

SCHED_FIFO(先进先出实时调度)

特点:

复制代码
实时调度策略,无时间片限制

相同优先级按FIFO顺序执行

高优先级线程可立即抢占低优先级线程

线程会一直运行直到:主动放弃、被更高优先级线程抢占、阻塞

SCHED_OTHER(完全公平调度CFS)

特点:

复制代码
默认调度策略,所有普通线程使用

基于完全公平调度器(CFS)算法

使用动态优先级,受nice值影响

有固定的CPU时间片

Perfetto查看线程优先级方法:

FastMixer线程优先级为96 (real-time)

普通的MxierThread的优先级为 Priority 101:

可以看到其实这里看到静态priority是 96和101,和上面top获取的是有一个转换关系

原文地址:
https://mp.weixin.qq.com/s/LsjJA8WNEfRFV4ts9kdTqQ

更多framework实战干货,请关注下面"千里马学框架"

相关推荐
沐怡旸4 小时前
【Android】Handler/Looper机制相关的类图和流程图
android
生莫甲鲁浪戴4 小时前
Android Studio新手开发第二十一天
android·ide·android studio
生莫甲鲁浪戴4 小时前
Android Studio新手开发第二十二天
android·ide·android studio
用户41659673693554 小时前
Jetpack Compose 中实现带圆角边框的单词级富文本效果(分词与布局实践)
android
顾林海4 小时前
Android UI优化:让你的APP从“卡顿掉帧”到“丝滑如德芙”
android·面试·性能优化
啊森要自信5 小时前
【MySQL 数据库】MySQL用户管理
android·c语言·开发语言·数据库·mysql
黄毛火烧雪下5 小时前
(二)Flutter插件之Android插件开发
android·flutter
2501_916007475 小时前
iOS 上架技术支持全流程解析,从签名配置到使用 开心上架 的实战经验分享
android·macos·ios·小程序·uni-app·cocoa·iphone
Qt程序员6 小时前
基于原子操作的 C++ 高并发跳表实现
c++·线程·c/c++·原子操作·无锁编程