gpt4 book ai didi

macos - 一致调度队列 : com. apple.root.default-qos.overcommit 崩溃

转载 作者:行者123 更新时间:2023-12-03 16:00:42 24 4
gpt4 key购买 nike

有人有诊断这些崩溃的经验吗?我有一个用户始终如一地获得它们,尽管我找到了一篇与 iOS 相关的帖子,但我的应用程序在相同类型的操作上并没有崩溃...

最佳答案

原因:

在iOS/tvOS中有队列/线程,每个线程都有自己的类型或优先级,也称为“服务质量”或简称“QOS”,这意味着CPU应该处理该线程的紧急程度,可能性是:

  • QOS_CLASS_DEFAULT
  • QOS_CLASS_USER_INITIATED
  • QOS_CLASS_UTILITY
  • QOS_CLASS_BACKGROUND
  • QOS_CLASS_UNSPECIFIED
  • QOS_CLASS_USER_INTERACTIVE

一旦您在同一个队列中同时运行太多任务,操作系统就会通知您它无法以相同的优先级同时执行所有这些任务(堆栈的大小有限制)每个队列),那里写着“OverCommit”,这意味着您已经过度提交了队列(在您的情况下是“Default-QOS”队列)并且它退出,因为它此时无法接收更多任务并以时尚方式执行它们你想要的。

解决方案:

您应该做的是首先找到导致此崩溃的“dispatch_async”命令,然后使用其他队列之一(这意味着预计响应速度会比该任务预期的响应速度慢),

通常开发人员不会考虑它,只是使用主队列,这是默认的优先级/队列,如下所示:

dispatch_async(dispatch_get_main_queue()) {
// some task to perform
print("This is my task")
}

为了解决此问题(如果应用程序通知您已过度使用主队列),请将其更改为其他队列之一,如下所示:

let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
// some task to perform
print("This is my task")
})

如果您不需要后台(或并行)执行,您甚至可以完全忽略dispatch_async命令并简单地执行如下命令:

// some task to perform
print("This is my task")

关于macos - 一致调度队列 : com. apple.root.default-qos.overcommit 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27948618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com