【发布时间】:2019-01-16 03:49:18
【问题描述】:
在 GCD 中,有两种方法可以同时运行块。
我可以使用其中一个全局池:
DispatchQueue.global().async() {
// do work
}
或者我可以创建自己的队列:
let queue = DispatchQueue(label: "process images", attributes: [.concurrent])
queue.async {
// do work
}
但我找不到太多关于何时更喜欢其中一个的信息。
有些地方(包括 this libdispatch 维护者的邮件列表帖子摘要)建议您真的不应该使用全局队列。
然而大多数代码示例只是调度到一个全局队列,甚至有一些消息来源说你真的不应该使用 custom 队列 - 而应该更喜欢 global排队。
哪种情况更适合每种队列?与此相关的是,一些文章建议优先使用串行队列而不是并发队列 - 但显然它们具有完全不同的并行特性,因此看到它们被建议为可互换是很奇怪的。
【问题讨论】:
-
看到这个话题是有争议的,但问题是如果你执行的任务较少,那么你可以使用全局队列,系统也使用全局队列。您可能使用自己的自定义队列的情况是,如果您正在设计一个框架或一个管理器类,您可能会在其中处理更多的任务队列。
标签: ios macos grand-central-dispatch