为什么我们不应该直接使用默认的QoS?
Why we should not use default QoS directly?
我读过一些 GDC 帖子,甚至 Apple 都说开发人员不应直接使用 .default
QoS,但为什么呢?易读性?
我认为为任务分配 .default
QoS 与不显式分配 QoS 是一样的。
“我认为将 .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。
我读过一些 GDC 帖子,甚至 Apple 都说开发人员不应直接使用 .default
QoS,但为什么呢?易读性?
我认为为任务分配 .default
QoS 与不显式分配 QoS 是一样的。
“我认为将 .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。