我已经在网上看到了这段代码
TABLE
第二个使用第一个作为目标。
它们之间的技术区别是什么?并非同时存在高优先级队列?
答案 0 :(得分:4)
两者之间存在巨大差异:全局队列是并发的,而视频队列是串行的。
如果直接将两个块提交到全局队列,则系统可以同时运行它们。
如果您向视频队列提交两个块,则系统必须按顺序(而不是同时)运行它们。您提交的第一个块必须返回,然后才允许队列调用第二个块。这意味着您可以将视频队列用作序列化/锁定机制,以线程安全的方式访问状态。
我知道的其他差异:
在Xcode的调试导航器中,队列的标签不同。
您可以设置创建的视频队列的自动释放频率。
如果在创建视频队列时在其上设置服务质量类,则该QoS将覆盖目标队列的QoS。
您可以暂停并恢复视频队列上的分发。我不确定suspend
和resume
是否适用于全局队列,但是如果可以,我确定暂挂全局队列是一个坏的主意。您不知道系统可能在全局队列中排队哪些重要任务。
您可以在视频队列中使用setSpecific
个值,然后使用getSpecific
在排队到视频队列中的块中访问它们。但是getSpecific
不会在直接排队到全局队列的块中返回这些值。出于线程安全原因,这通常用于检测何时在特定队列上进行API调用。