系统为每个应用程序提供四个并发调度队列。这些队列是应用程序的全局队列,仅根据其优先级进行区分。
系统还为您提供了几个并发队列。这些队列与自己的服务质量(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_INTERACTIVE
,QOS_CLASS_USER_INITIATED
,QOS_CLASS_UTILITY
和QOS_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会说四个?