在 GCD 中,何时使用全局并发队列与自定义并发队列?



在GCD中,有两种方法可以同时运行块。

我可以使用其中一个全局池:

DispatchQueue.global().async() {
  // do work
}

或者我可以创建自己的队列:

let queue = DispatchQueue(label: "process images", attributes: [.concurrent])
queue.async {
  // do work
}

但我找不到太多关于何时偏爱一个而不是另一个的信息。

有些地方(包括来自libdispatch维护者的邮件列表帖子摘要(建议你真的不应该使用全局队列。

然而,大多数代码示例只是调度到全局队列,甚至有一些来源说你真的不应该使用自定义队列 - 而应该更喜欢全局队列。

哪种情况更适合每种队列?有点相关的是,一些文章建议更喜欢串行队列而不是并发队列 - 但显然它们具有完全不同的并行特性,因此将它们建议为可互换的很奇怪。

除了担心效率和线程爆炸之外,使用您自己的并发队列,您还可以:

  • 指定对调试有意义的标签
  • 暂停它
  • 设置和获取特定于应用的数据
  • 提交障碍任务

对于全局并发队列,这些都是不可能的。

相关内容

  • 没有找到相关文章

最新更新