我已经在网上看到了这个代码
let highQueue = DispatchQueue.global(qos: .userInteractive)
let videoDataOutputQueue = DispatchQueue(label: "com.apple.sample.capturepipeline.video", attributes: [], target: highQueue)
第二个使用第一个作为目标。
它们之间有什么技术差异?是不是并发高优先级队列???
有一个巨大的区别:全局队列是并发的,而您的视频队列是串行的。
如果直接向全局队列提交两个块,则允许系统同时运行它们。
如果向视频队列提交两个块,则系统必须按顺序(而不是同时)运行它们。您提交的第一个块必须在允许队列调用第二个块之前返回。这意味着您可以将视频队列用作序列化/锁定机制,以线程安全的方式访问状态。
我所知道的其他差异:
suspend
和resume
是否在全局队列上工作,但如果他们这样做,我肯定暂停全局队列是一个坏主意。您不知道系统可能在全局队列上排队的重要任务。setSpecific
值,然后使用getSpecific
在排队到视频队列的块中访问它们。但是getSpecific
不会在直接排队到全局队列的块中返回这些值。出于线程安全的原因,这通常用于检测何时在特定队列上进行API调用。