为什么我们不应该直接使用默认的QoS?

Why we should not use default QoS directly?

我读过一些 GDC 帖子,甚至 Apple 都说开发人员不应直接使用 .default QoS,但为什么呢?易读性?

我认为为任务分配 .default QoS 与不显式分配 QoS 是一样的。

Link从截图属于:https://developer.apple.com/library/archive/documentation/Performance/Conceptual/EnergyGuide-iOS/PrioritizeWorkWithQoS.html

“我认为将 .default QoS 分配给任务与不显式分配 QoS 是一样的。”你是对的。

在我看来,苹果建议我们为了特定的目的一般使用其他4种类型。如果您对此不确定,它将为您的任务选择 .default。

.default 是出于向后兼容的原因,因为 GCD 无法猜测您要分配任务的优先级。

使用其他 4 个推荐值有两个原因:

  • 它为系统提供了更多有关您的任务应遵循的执行层次结构的上下文。例如,与后台任务相比,用户启动的任务可能被安排在优先级更高的队列中。这使系统能够优化何时 运行 您的任务以及能源消耗。参见 Session 706 of WWDC 2017
  • Apple silicon(iPhone、iPad、Apple TV、Apple Watch 和 M1 Mac)具有高性能和高效内核,系统根据 QoS 开发人员设置决定使用哪些内核。想象一下,用户交互任务将 运行 在高性能核心上,而后台任务可能 运行 在效率核心上。有关详细信息,请参阅 Tuning Your Code’s Performance for Apple Silicon