【发布时间】:2014-01-14 20:09:04
【问题描述】:
我很困惑串行队列和并发队列是什么。并发是否允许一堆操作在队列中,然后将它们拆分到可用线程上,而串行也这样做,但将其限制为一个线程并一次等待一个完成?
文档中的解释似乎很混乱。
【问题讨论】:
标签: ios objective-c multithreading concurrency grand-central-dispatch
我很困惑串行队列和并发队列是什么。并发是否允许一堆操作在队列中,然后将它们拆分到可用线程上,而串行也这样做,但将其限制为一个线程并一次等待一个完成?
文档中的解释似乎很混乱。
【问题讨论】:
标签: ios objective-c multithreading concurrency grand-central-dispatch
“serial”表示提交到队列的blocks是顺序执行的, 即在第一个块完成之前不执行第二个块。 它确实 not 意味着块在同一个线程上执行。
“并发”表示提交到队列的块可能执行 同时(在不同的线程上)。
在这两种情况下,GCD 都使用“线程池”来执行块,所以你不知道在哪个 thread 将执行一个块。唯一的例外是“主队列” 执行主线程上的所有块。
【讨论】:
【讨论】:
队列:必须是串行或并发。以及 global 或 private 同时。
串行队列:任务将被一个接一个地完成
并发队列:任务将同时执行,并且将在意外的计划中完成
私有队列:可以是串行或并发
全局队列:
队列可以同步或异步执行,但这会影响父队列而不是队列本身
所以:
同步函数只有在之后才将控制权返回给父队列 任务完成。它阻塞队列并等待直到任务完成 完成了。
异步函数在之后立即将控制权返回给父队列 任务已被发送以在不同的队列上执行。它没有 等到任务完成。它不会阻塞父队列。
【讨论】: