- 0:摘自苹果官方的说明:
Grand Central Dispatch(GCD)
是异步执行任务的技术之一。还有一句更为给力的说明:开发者要做的只是定义想执行的任务并追加到适当的Dispatch Queue中。
也就是像这样:
dispatch_async(queue,^{
//something want to do
});
上述的源代码使用Block语法“定义想执行的任务”,通过dispatch_async
函数“追加”赋值在变量queue的“Dispatch Queue中”。这样就可以似的指定的Block在另外一条线程中执行。
- 1:
“Dispatch Queue”
意如其名--执行处理的等待序列。我们可以通过dispatch_async函数等API,在Block语法中记述想执行的处理并追加到Dispatch Queue中。此队列会按照追加的顺序:FIFO执行处理。
另:在执行处理的时候存在两种队列:Serial Dispatch Queue(串行队列)和Concurrent Dispatch Queue(并行队列)。 - 2:
Serial Dispatch Queue
:等待现在执行中的处理结束方可顺序执行下一个。它使用的是一个线程。是一对一的关系。与Serial Dispatch Queue不同的是,Concurrent Dispatch Queue:不等待现在执行中的处理结束,可以并行执行多个处理,但并行执行的处理数量取决于当前系统的状态。所谓“并行执行”就是使用多个线程同时执行多个处理。是一对多的关系。Concurrent Dispatch Queue在执行处理时,执行顺序会根据处理内容和系统的状态发生改变。并不能像Serial Dispatch Queue固定顺序的执行。 - 3:至于系统当前使用的线程数,是由iOS和OSX的核心---XNU内核决定的,并只生成所需的线程执行处理。当处理结束,需要执行的处理数量减少的时候,XNU内核会结束不再需要的线程。
- 4:通过GCD的API生成Dispatch Queue
dispatch_queue_create("queue",NULL)
.生成Serial Dispatch Queue。dispatch_queue_create("queue",DISPATCH_QUEUE_CONCURRENT).
生成Concurrent Dispatch Queue。当然有创建就有管理,和OC的引用计数式内存管理一样,需要通过dispatch_retain 和 dispatch_release函数的引用计数来管理内存。 - 5:直接获取系统标准提供的Dispatch Queue
Main Dispatch Queue 在主线程执行的dispatch queue,为Serial Dispatch Queue。追加到Main Dispatch Queue的处理在主线程的RunLoop中执行。dispatch_queue_t mainQueue = dispatch_get_main_queue();
Global Dispatch Queue 是所有应用程序都能使用的Concurrent Dispatch Queue,对于这个队列有四个优先级,在获取的时候可以依据需要进行选择。