sp; ts_priority; /* priority of turnstile (WL) */
#if DEVELOPMENT || DEBUG
uint8_t ts_state; /* current state of turnstile (IL) */
queue_chain_t ts_global_elm; /* global turnstile chain */
thread_t ts_thread; /* thread the turnstile is attached to */
thread_t ts_prev_thread; /* thread the turnstile was attached before donation */
#endif
};
优先级数值
在验证环节有一些优先级数值,这里借助「Mac OS® X and iOS Internals 」解释一下:实验中涉及到的优先级数值都是相对于Mach
层而言的,且都是用户线程数值
- 用户线程的优先级是0~63;
NSQualityOfServiceBackground
的Mach
层级优先级数是4;
NSQualityOfServiceUtility
的Mach
层级优先级数是20;
NSQualityOfServiceDefault
的Mach
层级优先级数是31;
NSQualityOfServiceUserInitiated
的Mach
层级优先级数是37;
NSQualityOfServiceUserInteractive
的Mach
层级优先级是47;
- 内核线程的优先级是80~95;
- 实时系统线程的优先级是96~127;
- 64~79被保留给系统使用;
总结
本文主要阐述了优先级反转的一些概念和解决思路,并结合iOS
平台的几种锁进行了详细的调研。通过深入的理解,可以去规避一些不必要的优先级反转,从而进一步避免卡死异常。字节跳动 APM
团队也针对线程的优先级做了监控处理,进而达到发现和预防优先级反转的目的。
加入我们
字节跳动 APM 中台致力于提升整个集团内全系产品的性能和稳定性表现,技术栈覆盖iOS/Android/Server/Web/Hybrid/PC/游戏/小程序等,工作内容包括但不限于性能稳定性监控,问题排查,深度优化,防劣化等。长期期望为业界输出更多更有建设性的问题发现和深度优化手段。
欢迎对字节APM团队职位感兴趣的同学投递简历到邮箱 xushuangqing@bytedance.com 。
参考文档