第三章 3.2.1 Dispatch Queue

2018-07-25  本文已影响7人  MrSYLong

3.2.1 Dispatch Queue
苹果官方对GCD的说明:
开发者要做的只是定义想要执行的任务并追加到适当的Dispatch Queue中。

dispatch_async(queue, ^{
        
        /* 想执行的任务 */
    });
说明:使用Block语法“定义想要执行的任务”,通过dispatch_async函数“追加”赋值到变量queue的“Dispatch Queue”中,Block中想执行的任务,就在另一线程中执行了。

问题一、Dispatch Queue是什么?
Dispatch Queue是执行处理任务的等待队列,通过Block语法将想要执行的任务追加到Dispatch Queue中,它会按照追加的顺序执行处理。

问题二、Dispatch Queue的种类?
1、Serial Dispatch Queue:等待现在执行中的任务处理结束,使用一个线程,一个任务处理结束,下一个任务才开始执行。
2、Concurrent Dispatch Queue:不等待现在执行中的任务处理结束,使用多个线程,一个任务开始执行后,不管是否结束,下一个任务就开始执行。

问题三、Concurrent Dispatch Queue并行执行的处理数?
Concurrent Dispatch Queue不用等待任务处理结束,可并行执行多个处理,并行执行的处理数由CPU核数以及CPU负荷等当前系统的状态决定。

问题四、线程数?
iOS和OS X的核心—XNU内核决定当前使用的线程数,只生成所需的线程执行处理。处理结束,处理数减少,XNU内核结束不在需要的线程。

总结:
在不能改变执行的处理顺序或不想并行执行多个处理时使用Serial Dispatch Queue。
Concurrent Dispatch Queue执行处理时,执行顺序会根据处理内容和系统状态发生改变,所以执行顺序不是固定的。

问题五、如何得到Dispatch Queue?
方法有两种,见3.2.2、3.2.3

上一篇下一篇

猜你喜欢

热点阅读