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

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

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

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

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

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



