繁体   English   中英

iOS GCD:在哪个线程上执行自定义调度队列? 关于 GCD 的更多问题

[英]iOS GCD: On which thread custom dispatch queue is executed? Few more questions on GCD

我有几个问题:

  1. 当创建任何自定义调度队列(串行或并发)时,它们在哪个线程上执行任务。

  2. 我有点通过从以下GCD文档文本迷惑在这里

除了您创建的任何自定义队列之外,系统还会自动创建一个串行队列并将其绑定到您的应用程序的主线程。 有关获取主线程队列的更多信息,请参阅在运行时获取公共队列。

  1. 如果在全局队列上调用 dispatch_suspend() 或 dispatch_resume() 会发生什么?

你应该把这些事情分解成单独的问题。 这种大问题让未来的搜索者很难。

当创建任何自定义调度队列(串行或并发)时,它们在哪个线程上执行任务。

这个没有定义。 您不能对将使用哪个底层线程做出任何假设。 同一队列上的块与块之间可能会发生变化。 在某些情况下,它甚至可能是调度线程。

应用程序主线程上的队列是主调度队列。 您可以使用dispatch_get_main_queue()访问它。

全局队列忽略dispatch_suspend()dispatch_resume() 这在dispatch_get_global_queue()的讨论中有记录。

  1. 当创建任何自定义调度队列(串行或并发)时,它们在哪个线程上执行任务。

GCD 创建“工作线程”,将它们放在一个“池”中,并在需要线程时利用该池。 最重要的是,GCD 会为您处理所有与线程相关的事情,您无需担心。

  1. 我对 GCD 文档中的以下文本感到有些困惑:

除了您创建的任何自定义队列之外,系统还会自动创建一个串行队列并将其绑定到您的应用程序的主线程。 有关获取主线程队列的更多信息,请参阅在运行时获取公共队列。

这只是说 GCD 为您创建main队列,将其绑定到应用程序的主线程。 由于我们在 GCD 中所做的一切都与队列有关,因此我们需要一个绑定到主线程的队列,以便我们可以使用标准的 GCD 模式来调度它。

  1. 如果在全局队列上调用dispatch_suspend()dispatch_resume()会发生什么?

正如文档所说,它们没有效果:

suspend()resume()dispatch_set_context(_:_:)函数的调用对返回的队列没有影响。

您也不能在全局队列上使用障碍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM