Mat*_*rix 2 multithreading grand-central-dispatch ios
我正在关注 GCD 的博客、在线文章、视频,并且遇到了一个术语目标队列(在某些博客上)。我以为我理解了 GCD,但是这个目标队列术语确实让我困惑。
我的理解是:
例如:
viewdidload(){
DispatchQueue.main.async{
print("hello world")
}
}
Run Code Online (Sandbox Code Playgroud)
目标队列是一个比较高级的主题,但并不经常使用。除非您有非常具体的需求(见下文),否则您可以放心地忽略此功能。
\n创建自定义队列时,您可以将其定义为具有一个目标,即自定义队列将在幕后使用的队列。因此,如果您创建一个A带有目标队列 的队列 ,T那么调度到的任何内容A实际上都会在T。因此,您可能会问人们什么时候可能倾向于使用这种模式:
也许您有多个队列想要共享某些行为。例如,您可能有队列A、 、B,并且C所有队列都使用串行队列T作为其目标。A那么, 、B、 和不仅会C单独串行,而且也会跨A、B、 和C串行。例如,将某件事分派到A队列B,将另一件事分派到队列,任务B将等待任务A完成(因为任务的串行性质)T,它们共享目标队列)。
或者想象一下,您有三个并发队列 、A、B和C,但您偶尔想要在这三个队列之间设置屏障,某些关键任务无法与这三个队列上运行的任何内容同时运行。如果在创建A、B、 和时C指定并发队列T作为所有这些队列的目标队列,如果向 、 和 中添加屏障任务,T则、 和ABC都将遵守该屏障。
如果您分析代码并且发现有大量的 \xe2\x80\x9ccontext 开关\xe2\x80\x9d 发生,而 GCD 代码导致不同线程之间不断跳转,则可以使用目标队列。对于常见的 GCD 应用程序(例如,在某些后台队列上运行此计算量大的代码,然后将更新分派回主队列),此目标队列概念没有提供任何实际好处。但是,如果您\xe2\x80\x99 在 GCD 队列之间进行数千/数百万次调度,那么它可能是相关的。但在您费心之前先分析一下您的代码,以检测发生了多少次上下文切换,并看看这是否会在您的场景中带来任何实际好处。
\n有关您可以在何处使用目标队列来解决这些性能相关问题的示例,请参阅 WWDC 2017 视频现代化 Grand Central Dispatch 使用:统一队列标识简介。在上面的链接中,我\xe2\x80\x99已尝试让您进入视频的相关部分,但观看整个视频可能会提供更多背景信息。
\n最重要的是,在某些情况下您可能需要指定目标队列,但在实践中它\xe2\x80\x99 非常罕见。
\n| 归档时间: |
|
| 查看次数: |
1000 次 |
| 最近记录: |