GCD - 线程排队 -

时间:2018-06-13 19:35:41

标签: multithreading grand-central-dispatch

有人可以帮助我理解使用GCD时的线程入队。 我想了解在放置断点时我们看到的线程入队。 它是如何工作的?

每个线程都在主队列或全局队列上执行吗?这是入队的原因吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

  

有人可以帮助我了解使用GCD时的线程排队。我想了解放置断点时看到的线程排队。

我建议您反过来考虑。您不会“排队”线程。您将代码块分派到队列(即“入队”),分派队列将选择该代码将在其上运行的适当线程。

enter image description here

例如,在上面,我创建了一个队列,向该队列调度了一个代码块,并添加了一个断点。我可以看到我的队列启动了一个线程(在本例中为“线程3”),并且可以看到它是从“主线程”上运行的viewDidLoad方法“排队”的。

  

每个线程都在主队列或全局队列上执行吗?

同样,这是另一回事。分派到特定队列的代码将触发该队列在特定线程上运行该代码块。

但是有三种类型的队列:

  • “主”队列(在一个专用的专用“主”线程上运行其代码);
  • 各种共享的“全局”队列之一(它将从工作线程池中选择一个后台线程并在该线程上运行代码);或
  • 您创建到自定义队列的“自定义”队列,如上。
  

是排队的原因吗?

此“排队”仅是将代码块添加到队列的过程。 Xcode会尝试向您显示代码的排队位置,以帮助您诊断代码的发出位置。