Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 串行队列与并发队列有何不同?_Ios_Objective C_Multithreading_Concurrency_Grand Central Dispatch - Fatal编程技术网

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

Ios 串行队列与并发队列有何不同?,ios,objective-c,multithreading,concurrency,grand-central-dispatch,Ios,Objective C,Multithreading,Concurrency,Grand Central Dispatch,我很困惑串行队列和并发队列是什么。并发是否允许队列中有一组操作,然后在可用线程上拆分它们,而串行是否也这样做,但将其限制为一个线程,并一次等待一个线程完成 文档中的解释似乎非常混乱。队列: ------ ------ ------- ------- 队列: ------ ------ ------- ------- 队列: ------ ------ ------- ------- 队列: ------ ------ -------

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

文档中的解释似乎非常混乱。

队列:

------
------
-------
       -------
队列:

------
------
-------
       -------
队列:

------
------
-------
       -------
队列:

------
------
-------
       -------
“串行”表示提交到队列的块按顺序执行, i、 e.在第一个块完成之前,不执行第二个块。 这并不意味着这些块是在同一个线程上执行的

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

在这两种情况下,GCD都使用一个“线程池”来执行块,因此您无法知道在哪个线程池上执行 线程将执行一个块。唯一的例外是“主队列”,它 执行主线程上的所有块。

“串行”表示提交到队列的块按顺序执行, i、 e.在第一个块完成之前,不执行第二个块。 这并不意味着这些块是在同一个线程上执行的

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

在这两种情况下,GCD都使用一个“线程池”来执行块,因此您无法知道在哪个线程池上执行 线程将执行一个块。唯一的例外是“主队列”,它
执行主线程上的所有块。

队列:必须是串行并发。以及同时全球私人

序列队列:任务将逐个完成
并发队列:任务将同时执行,并按意外计划完成

专用队列:既可以是串行队列,也可以是并发队列
全局队列:

  • 主队列:串行
  • 另一个队列:并发
  • 队列可以同步或异步执行,但这将影响父队列而不是队列本身

    因此:

    • 同步函数仅在 任务完成了。它阻塞队列并等待任务完成 完成了

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


    队列:必须是串行并发。以及同时全球私人

    序列队列:任务将逐个完成
    并发队列:任务将同时执行,并按意外计划完成

    专用队列:既可以是串行队列,也可以是并发队列
    全局队列:

  • 主队列:串行
  • 另一个队列:并发
  • 队列可以同步或异步执行,但这将影响父队列而不是队列本身

    因此:

    • 同步函数仅在 任务完成了。它阻塞队列并等待任务完成 完成了

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


    您应该阅读苹果文档您应该阅读苹果文档