我有几个问题:
-
当创建任何自定义调度队列(串行或并发)时,它们在哪个线程上执行任务。
-
我对以下来自GCD文档的文本有点困惑:
除了您创建的任何自定义队列外,系统还会自动创建一个串行队列,并将其绑定到应用程序的主线程。有关获取主线程队列的更多信息,请参阅在运行时获取公共队列。
- 如果在全局队列上调用dispatch_suspend()或dispatch_resume(),会发生什么
您应该将这些事情分解为单独的问题。这种大问题让未来的搜索者很难回答。
当创建任何自定义调度队列(串行或并发)时,它们在哪个线程上执行任务。
未对此进行定义。您不能对将使用哪个底层线程做出任何假设。在同一队列中,它可能会在不同的块之间发生变化。在某些情况下,它甚至可能是调度线程。
应用程序主线程上的队列是主调度队列。您可以使用dispatch_get_main_queue()
访问它。
全局队列忽略dispatch_suspend()
和dispatch_resume()
。这在dispatch_get_global_queue()
的讨论中有记载。
- 当创建任何自定义调度队列(串行或并发)时,它们在哪个线程上执行任务
GCD创建"工作线程",将它们放在"池"中,并在需要线程时利用该池。最重要的是,GCD会为您处理所有与线程相关的东西,您不必担心。
- 以下来自GCD文档的文本让我有点困惑:
除了您创建的任何自定义队列外,系统还会自动创建一个串行队列,并将其绑定到应用程序的主线程。有关获取主线程队列的更多信息,请参阅在运行时获取公共队列。
这只是说GCD为您创建main
队列,并将其绑定到应用程序的主线程。由于我们在GCD中所做的一切都是使用队列的,所以我们需要一个绑定到主线程的队列,这样我们就可以使用标准的GCD模式来调度它
- 如果在全局队列上调用
dispatch_suspend()
或dispatch_resume()
,会发生什么情况
正如文件所说,它们没有任何影响:
对
suspend()
、resume()
和dispatch_set_context(_:_:)
函数的调用对返回的队列没有影响。
您也不能在全局队列中使用屏障。