【问题标题】:How do serial queues differ from concurrent queues?串行队列与并发队列有何不同?
【发布时间】:2014-01-14 20:09:04
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

“serial”表示提交到队列的blocks是顺序执行的, 即在第一个块完成之前不执行第二个块。 它确实 not 意味着块在同一个线程上执行。

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

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

【讨论】:

    【解决方案2】:

    Concurrent (1.)队列:

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

    Serial (6.)队列:

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

    【讨论】:

      【解决方案3】:

      队列:必须是串行并发。以及 globalprivate 同时。

      串行队列:任务将被一个接一个地完成
      并发队列:任务将同时执行,并且将在意外的计划中完成

      私有队列:可以是串行或并发
      全局队列:

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

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

      所以:

      • 同步函数只有在之后才将控制权返回给父队列 任务完成。它阻塞队列并等待直到任务完成 完成了。

      • 异步函数在之后立即将控制权返回给父队列 任务已被发送以在不同的队列上执行。它没有 等到任务完成。它不会阻塞父队列。

      【讨论】:

        猜你喜欢
        • 2013-10-11
        • 1970-01-01
        • 2017-06-27
        • 1970-01-01
        • 2019-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多