由于每个调度队列都会消耗线程资源,因此创建额外的并发调度队列会加剧线程消耗问题。将任务提交到全局并发调度队列之一,而不是创建专用并发队列。对于串行任务,请将串行队列的目标设置为全局并发队列之一。这样,您可以维护队列的序列化行为,同时最大限度地减少创建线程的单独队列的数量。
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)
尽管使用第一个变体不太方便,但它可以防止应用程序中线程的激增。
如果您使用更详细的语法创建串行队列,则提交到串行队列的任务将在分配给全局队列的线程上执行。创建队列时系统不必生成新线程。
在第二种情况下,您不设置目标队列:
let q = DispatchQueue(label: "someSerialQueue")
Run Code Online (Sandbox Code Playgroud)
因此,系统会将新线程与新创建的队列关联起来,从而增加应用程序的线程消耗。
因此,更长的语法带来了巨大的好处——绝对值得小额投资。
| 归档时间: |
|
| 查看次数: |
1306 次 |
| 最近记录: |