串行队列与并发队列有何不同?

时间:2014-01-14 20:09:04

标签: ios objective-c multithreading concurrency grand-central-dispatch

我很困惑串行与并发队列是什么。并发允许一堆操作在队列中,然后在可用线程上拆分它们,而串行也是如此,但是将它限制在一个线程并一次等待一个线程完成?

文档中的解释似乎很混乱。

3 个答案:

答案 0 :(得分:4)

"串行"表示提交到队列的块按顺序执行, 即,在第一个块完成之前不执行第二个块。 意味着块在同一个线程上执行。

"并发"表示提交到队列的块可能执行 同时(在不同的线程上)。

在这两种情况下,GCD使用"线程池"执行块,所以你不知道在哪个 线程将执行一个块。唯一的例外是"主队列"哪一个 执行主线程上的所有块。

答案 1 :(得分:2)

Concurrent (1.)队列:

------
------

Serial (6.)队列:

-------
       -------

答案 2 :(得分:0)

队列:必须为串行并发。以及全局私有

串行队列:任务将一个接一个地完成
并发队列:任务将同时执行,并会以意外的时间表完成

私人队列:可以是串行队列,也可以是并发队列
全局队列:

  1. 主队列:串行
  2. 另一个队列:并发

队列可以同步或异步执行,但这会影响父队列而不是自身队列

所以:

  • 仅在以下情况下,同步函数才将控制权返回给父队列 任务完成。它阻塞队列并等待直到任务完成 完成。

  • 异步函数在紧接之后将控制权返回给父队列 已发送任务以在其他队列上执行。没有 等待任务完成。它不会阻止父队列。