关于GCD系统提供的四个并发调度队列的困惑

时间:2015-07-24 04:22:38

标签: ios concurrency grand-central-dispatch

Apple document说:

  

系统为每个应用程序提供四个并发调度队列。这些队列是应用程序的全局队列,仅根据其优先级进行区分。

This tutorial说:

  

系统还为您提供了几个并发队列。这些队列与自己的服务质量(QoS)类链接。

运行以下代码行:

println(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0))
println(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0))
println(dispatch_get_global_queue(QOS_CLASS_UTILITY, 0))
println(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0))

我明白了:

<OS_dispatch_queue_root: com.apple.root.user-interactive-qos[0x10c2b9000]>
<OS_dispatch_queue_root: com.apple.root.user-initiated-qos[0x10c2b8e80]>
<OS_dispatch_queue_root: com.apple.root.utility-qos[0x10c2b8b80]>
<OS_dispatch_queue_root: com.apple.root.background-qos[0x10c2b8a00]>

那么,四个并发调度队列分别与QOS_CLASS_USER_INTERACTIVEQOS_CLASS_USER_INITIATEDQOS_CLASS_UTILITYQOS_CLASS_BACKGROUND相关联吗?

此外,通过玩dispatch_get_global_queue,我得到QOS_CLASS_USER_INITIATED(。value = 25)对应DISPATCH_QUEUE_PRIORITY_HIGH(= 2),QOS_CLASS_UTILITY(。value = 17)对应DISPATCH_QUEUE_PRIORITY_LOW(= - 2),QOS_CLASS_BACKGROUND(。value = 9)对应DISPATCH_QUEUE_PRIORITY_BACKGROUND(= INT16_MIN)。

但是当我这样称呼时:

println(dispatch_get_global_queue(5, 0))

我明白了:

<OS_dispatch_queue_root: com.apple.root.maintenance-qos[0x1110ce880]>

maintenance不是上面提到的四个QoS,所以系统提供的并发调度队列至少有五个(我不确定是否存在更多),为什么Apple会说四个?

0 个答案:

没有答案