在GCD中,有两种方法可以同时运行块。
我可以使用全局池之一:
DispatchQueue.global().async() {
// do work
}
或者我可以创建自己的队列:
let queue = DispatchQueue(label: "process images", attributes: [.concurrent])
queue.async {
// do work
}
但是我找不到太多关于何时选择一个优先于另一个的信息。
某些地方(包括this来自libdispatch维护者的邮件列表帖子的摘要)表明您确实不应该使用全局队列。
然而,大多数代码示例只是调度到全局队列,甚至有一些消息源说您确实不应该使用 custom 队列-应该更喜欢 global 队列。
哪种情况适合每种队列?与此相关的是,有些文章建议优先使用串行队列,而不是并发队列,但是显然它们具有完全不同的并行性,因此很奇怪地看到它们建议可互换。
答案 0 :(得分:3)
除了对效率和线程爆炸的担忧之外,您还可以使用自己的并发队列:
对于全局并发队列,这些都不是。