安卓系统中线程优先级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实战干货,请关注下面"千里马学框架"

相关推荐
qeen876 小时前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
故渊at7 小时前
第二板块:Android 四大组件标准化学理 | 第九篇:BroadcastReceiver 事件分发与有序广播
android·gitee·broadcast·广播·动态注册·静态注册
JohnnyDeng947 小时前
【Android】Room 数据库高级用法与性能调优:从查询瓶颈到毫秒级响应
android·性能优化·kotlin·room
zeqinjie7 小时前
Flutter 折叠屏 iPad / 宽屏适配实践
android·前端·flutter
ab_dg_dp7 小时前
Android 17+ 提取 AIDL 生成 Java 文件的实用脚本
android·java·python
Arrom8 小时前
DLNA 渲染端排障实战:从 20s 卡顿到 stale subscriber 的两周追凶之旅
android·java
_李小白9 小时前
【android opencv学习笔记】Day 32:直线检测之霍夫变换
android·opencv·学习
plainGeekDev12 小时前
文件读写(Java IO)→ Kotlin 扩展函数
android·java·kotlin
s_nshine13 小时前
释放C盘,迁移studio相关数据到其他盘
android·windows·android studio·内存·c盘