# 44、通过Dispatch Group机制，根据系统资源状况来执行任务

`dispatch group` 是GCD的一项特性，能够把任务分组。调用者可以等待这组任务执行完毕，也可以在提供会掉函数之后继续往下执行，这组任务完成时，调用者会得到通知。

```objectivec
// 把任务编组
// 方法1：
void dispatch_group_async(dispatch_group_t group, 
                          dispatch_queue_t queue, 
                          dispatch_block_t block);
// 方法2：
void dispatch_group_enter(dispatch_group_t group);
void dispatch_group_leave(dispatch_group_t group);

// 等待group执行完毕：
// 方法1：
long dispatch_group_wait(dispatch_geoup_t group, 
                         dispatch_time_t timeout); // 会阻塞
// 方法2：
void dispatch_group_notify(dispatch_group_t group, 
                           dispatch_queue_t queue, 
                           dispatch_block_t block);
```

要点：

* 一系列任务可归入一个`dispatch group`中。开发者可以在这组任务执行完毕时获得通知
* 通过`dispatch group`，可以在并发式派发队列里同事执行多项任务，此时GCD会根据系统资源状况来调度这些并发执行的任务。开发者若自己来实现此功能，则需编写大量代码
