我在IOS应用程序中使用GCD。我有三个线程:主线程,线程2和线程3。
以下代码在线程2上执行:
dispatch_async(dispatch_get_main_queue(), ^{ code block 1 ...
因此代码块1将在主线程上执行。如果在代码块1完成运行之前在线程3中执行以下代码,会发生什么情况:
dispatch_async(dispatch_get_main_queue(), ^{ code block 2 ...
bock2会等到bock1终止吗?
我如何找到此类问题的答案?我应该阅读APPLE的文档还是自己做一些实验?我可以做什么样的实验?
所需的文档是《并发编程指南》。特别是,您需要有关调度队列的部分,并且更重要的是,您需要有关从线程迁移的部分。
您不应认为自己具有三个线程(实际上,您可能没有)。您可能有三个街区。您可能有三个队列。内部调度细节是如何以及如何将它们调度到线程的。
在GCD中,单词“ dispatch”的意思是“放在队列中”。当一个块到达系统队列的最前面时,它将有资格在可用线程上运行。队列可以馈入其他队列,但是最终它们必须绑定到系统队列之一(否则它们将永远不会执行)。
主队列是串行队列。像其他串行队列一样,每个块都必须在允许下一个块运行之前完成(这就是为什么您不小心会饿死或死锁主队列的原因)。还有并发队列,它们仅要求在考虑下一个块之前启动每个块。
但是关键是要记住,这些只是可以放入块的FIFO队列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句