提交给调度组的块是连续执行还是同时执行?

时间:2013-05-20 13:21:32

标签: grand-central-dispatch

Dispatch groups是一种GCD功能,允许用户提交要分派到某些队列的块。关于队列,根据队列的类型调度块:如果队列是串行的,则块将相对于该队列串行执行;如果队列是并发的,则同时发生,但同时发生。

但是,关于该组,调度是相互串联还是同时发生的?我的意思是,如果一个组有一个调度队列队列和要调度的块,下一个调度是否只在前一个调度完成时执行?

1 个答案:

答案 0 :(得分:7)

调度组中的成员资格与执行顺序无关。

调度组实际上只是一个计数器,dispatch_group_enter(group)递增计数器,dispatch_group_leave(group)递减计数器。

dispatch_group_async(group, queue, block)是以下的快捷方式:

dispatch_group_enter(group);
dispatch_async(queue, ^{
    block();
    dispatch_group_leave(group);
});

即。通过dispatch_group_async(group, queue, block)提交的块的执行顺序仅取决于指定的queue

当调度组计数器达到零(该组变空)时,dispatch_group_wait(group)中的所有服务员都被唤醒,并且已通过dispatch_group_notify(group, queue, block)提交给该组的所有服务器都是异步的到它们各自的queue(即如果指定的queue是并发/独立的,这些块可以同时执行。)