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

时间:2018-08-08 19:18:54

标签: ios macos grand-central-dispatch

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

我可以使用全局池之一:

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

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

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

但是我找不到太多关于何时选择一个优先于另一个的信息。

某些地方(包括this来自libdispatch维护者的邮件列表帖子的摘要)表明您确实不应该使用全局队列。

然而,大多数代码示例只是调度到全局队列,甚至有一些消息源说您确实不应该使用 custom 队列-应该更喜欢 global 队列。

哪种情况适合每种队列?与此相关的是,有些文章建议优先使用串行队列,而不是并发队列,但是显然它们具有完全不同的并行性,因此很奇怪地看到它们建议可互换。

1 个答案:

答案 0 :(得分:3)

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

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

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