这两个调度队列之间有什么区别?

时间:2019-02-23 06:10:38

标签: ios cocoa grand-central-dispatch dispatch-async

我已经在网上看到了这段代码

TABLE

第二个使用第一个作为目标。

它们之间的技术区别是什么?并非同时存在高优先级队列?

1 个答案:

答案 0 :(得分:4)

两者之间存在巨大差异:全局队列是并发的,而视频队列是串行的。

如果直接将两个块提交到全局队列,则系统可以同时运行它们。

如果您向视频队列提交两个块,则系统必须按顺序(而不是同时)运行它们。您提交的第一个块必须返回,然后才允许队列调用第二个块。这意味着您可以将视频队列用作序列化/锁定机制,以线程安全的方式访问状态。

我知道的其他差异:

  • 在Xcode的调试导航器中,队列的标签不同。

  • 您可以设置创建的视频队列的自动释放频率。

  • 如果在创建视频队列时在其上设置服务质量类,则该QoS将覆盖目标队列的QoS。

  • 您可以暂停并恢复视频队列上的分发。我不确定suspendresume是否适用于全局队列,但是如果可以,我确定暂挂全局队列是一个的主意。您不知道系统可能在全局队列中排队哪些重要任务。

  • 您可以在视频队列中使用setSpecific个值,然后使用getSpecific在排队到视频队列中的块中访问它们。但是getSpecific不会在直接排队到全局队列的块中返回这些值。出于线程安全原因,这通常用于检测何时在特定队列上进行API调用。