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

相关推荐
2501_9400940219 小时前
emu系列模拟器最新汉化版 安卓版 怀旧游戏模拟器全集附可运行游戏ROM
android·游戏·安卓·模拟器
下位子19 小时前
『OpenGL学习滤镜相机』- Day9: CameraX 基础集成
android·opengl
参宿四南河三20 小时前
Android Compose SideEffect(副作用)实例加倍详解
android·app
火柴就是我21 小时前
mmkv的 mmap 的理解
android
没有了遇见21 小时前
Android之直播宽高比和相机宽高比不支持后动态获取所支持的宽高比
android
shenshizhong1 天前
揭开 kotlin 中协程的神秘面纱
android·kotlin
Maỿbe1 天前
线程需要重点掌握的部分
线程
vivo高启强1 天前
如何简单 hack agp 执行过程中的某个类
android
沐怡旸1 天前
【底层机制】 Android ION内存分配器深度解析
android·面试
你听得到111 天前
肝了半个月,我用 Flutter 写了个功能强大的图片编辑器,告别image_cropper
android·前端·flutter