如何通过将其目标设置为并发队列来创建串行 DispatchQueue?

hga*_*ale 6 swift

由于每个调度队列都会消耗线程资源,因此创建额外的并发调度队列会加剧线程消耗问题。将任务提交到全局并发调度队列之一,而不是创建专用并发队列。对于串行任务,请将串行队列的目标设置为全局并发队列之一。这样,您可以维护队列的序列化行为,同时最大限度地减少创建线程的单独队列的数量。

https://developer.apple.com/documentation/dispatch/dispatchqueue

当文档说DispatchQueue通过将队列的目标设置为全局并发队列来创建串行时,这是他们的意思吗?

let q = DispatchQueue(label: "someSerialQueue", qos: .default, attributes: [], autoreleaseFrequency: .inherit, target: .global())
Run Code Online (Sandbox Code Playgroud)

另外,这真的比简单地标记它更可取吗:

let q = DispatchQueue(label: "someSerialQueue")
Run Code Online (Sandbox Code Playgroud)

Kar*_*tor 3

尽管使用第一个变体不太方便,但它可以防止应用程序中线程的激增。

如果您使用更详细的语法创建串行队列,则提交到串行队列的任务将在分配给全局队列的线程上执行。创建队列时系统不必生成新线程。

在第二种情况下,您不设置目标队列:

let q = DispatchQueue(label: "someSerialQueue")
Run Code Online (Sandbox Code Playgroud)

因此,系统会将新线程与新创建的队列关联起来,从而增加应用程序的线程消耗。

因此,更长的语法带来了巨大的好处——绝对值得小额投资。