gpt4 book ai didi

ios - 这两个调度队列有什么区别?

转载 作者:行者123 更新时间:2023-12-03 16:53:41 25 4
gpt4 key购买 nike

我在网络上看到过这段代码

 let highQueue = DispatchQueue.global(qos: .userInteractive)
let videoDataOutputQueue = DispatchQueue(label: "com.apple.sample.capturepipeline.video", attributes: [], target: highQueue)

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

它们之间的技术差异是什么?不是都是并发的高优先级队列吗???

最佳答案

有一个巨大的区别:全局队列是并发的,而视频队列是串行的。

如果直接向全局队列提交两个 block ,系统就可以同时运行它们。

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

我知道的其他差异:

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

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

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

  • 您可以暂停和恢复视频队列的调度。我不确定是否suspendresume在全局队列上工作,但如果他们这样做,我确信暂停全局队列是一个主意。您不知道系统可能在全局队列中排队哪些重要任务。

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

关于ios - 这两个调度队列有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54838776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com