一.隊列:這里的隊列指執(zhí)行任務(wù)的等待隊列,即用來存放任務(wù)的隊列。

二.在隊列中加入任務(wù)
1.隊列中 添加 異步調(diào)用的任務(wù),并執(zhí)行:

2.隊列中 添加 同步調(diào)用的任務(wù),并執(zhí)行:

三、注意: 并發(fā)隊列不具備開啟新線程能力,異步調(diào)用任務(wù)具備開啟新線程功能,
所以并發(fā)隊列中添加同步執(zhí)行多個任務(wù)時也只能依次執(zhí)行
四、GCD其他方法
1.GCD柵欄:dispatch_barrier_async
我們有時需要異步執(zhí)行兩組操作,而且第一組操作執(zhí)行完之后,才能開始執(zhí)行第二組操作。這樣我們就需要一個相當(dāng)于 柵欄 一樣的一個方法將兩組異步執(zhí)行的操作組給分割起來,當(dāng)然這里的操作組里可以包含一個或多個任務(wù)。

2.GCD延時執(zhí)行:dispatch_after
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 2.0 秒后異步追加任務(wù)代碼到主隊列,并開始執(zhí)
});
3.GCD 一次性代碼(只執(zhí)行一次):dispatch_once

-
GCD 隊列組:dispatch_group
有時候我們會有這樣的需求:分別異步執(zhí)行2個耗時任務(wù),然后當(dāng)2個耗時任務(wù)都執(zhí)行完畢后再回到主線程執(zhí)行任務(wù)。這時候我們可以用到 GCD 的隊列組。
.調(diào)用隊列組的 dispatch_group_async 先把任務(wù)放到隊列中,然后將隊列放入隊列組中?;蛘呤褂藐犃薪M的 dispatch_group_enter、dispatch_group_leave 組合來實現(xiàn) dispatch_group_async。
.調(diào)用隊列組的 dispatch_group_notify 回到指定線程執(zhí)行任務(wù)?;蛘呤褂?dispatch_group_wait 回到當(dāng)前線程繼續(xù)向下執(zhí)行(會阻塞當(dāng)前線程)。
WeChat3eaf8971943871e3a68db7569a7b5650.png
dispatch_group_wait:
-
暫停當(dāng)前線程(阻塞當(dāng)前線程),等待指定的 group 中的任務(wù)執(zhí)行完成后,才會往下繼續(xù)執(zhí)行。
WeChat4fc3a226882406e38bb1de1e7bbe577e.png
5.線程鎖:semaphore



