admin管理员组文章数量:1594248
最近收到了一些iOS16系统下的报错,DSYM之后发现是阿里云日志上传的地方出现了警告,调试的时候给出了警告,且这个问题为非必现,占比大概10%~20%,问题如下:
Thread running at QOS_CLASS_USER_INITIATED waiting on a lower QoS thread running at
QOS_CLASS_DEFAULT. Investigate ways to avoid priority inversions
这个问题意思大概就是,我们运行在 QOS_CLASS_USER_INITIATED的线程,前方正在运行着一个QOS_CLASS_DEFAULT的低QoS线程,这样有可能造成优先级反转。知道问题之后,修复的方法就清晰了,我们这里修改一下当前线程的优先级:
dispatch_queue_t referQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0); //降低线程优先级
dispatch_async(referQueue, ^{
[traker send:dic];
});
重复测试多次,发现没有警告了。
顺便解释一下什么事线程的优先级反转和线程的优先级问题!
1、优先级反转
当高优先级的工作依赖于较低优先级的工作时,或者它成为低优先级工作的结果,则会发生优先级反转。结果,可能会发生阻塞、旋转和轮询。
在同步工作的情况下,系统将通过在反转期间提高低优先级工作的QoS来自动解决优先级反转。这将发生在以下情况:
在串行队列上调用dispatch_sync()和dispatch_wait()时。
当调用pthread_mutex_lock()时,互斥对象被一个带有较低QoS的线程所控制。在这种情况下,持有锁的线程被提高到调用者的QoS。但是,这个QoS升级不会出现在多个锁之间。
在异步工作的情况下,系统将尝试解决串行队列中出现的优先级反转
2、线程的优先级
DISPATCH_QUEUE_PRIORITY_HIGH 2 高
DISPATCH_QUEUE_PRIORITY_DEFAULT 0 默认
DISPATCH_QUEUE_PRIORITY_LOW -2 低
DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN 2 后台优先级
本文标签: 线程
版权声明:本文标题:XCode14线程警告问题 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1728178997a1148212.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论