GCD總結(jié)

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


截屏2019-11-25下午3.33.07.png

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


WeChatb25754c387545517b9850be5214b22b6.png

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


WeChat85ae90e50299d48e899b68085ab1f637.png

三、注意: 并發(fā)隊列不具備開啟新線程能力,異步調(diào)用任務(wù)具備開啟新線程功能,
所以并發(fā)隊列中添加同步執(zhí)行多個任務(wù)時也只能依次執(zhí)行

四、GCD其他方法
1.GCD柵欄:dispatch_barrier_async
我們有時需要異步執(zhí)行兩組操作,而且第一組操作執(zhí)行完之后,才能開始執(zhí)行第二組操作。這樣我們就需要一個相當(dāng)于 柵欄 一樣的一個方法將兩組異步執(zhí)行的操作組給分割起來,當(dāng)然這里的操作組里可以包含一個或多個任務(wù)。


WeChat5cd70c31f784940a9e49b6459109d638.png

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


WeChat82590a98918eed2b04486d2e8fa77aa8.png
  1. 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


WeChat1351ae3e4e6409fa08e7f11af68eba40.png

WeChatd96ae613e3e55b080e0a44ec9416eded.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文用來介紹 iOS 多線程中 GCD 的相關(guān)知識以及使用方法。這大概是史上最詳細(xì)、清晰的關(guān)于 GCD 的詳細(xì)講...
    花花世界的孤獨行者閱讀 576評論 0 1
  • GCD 的使用步驟 GCD 的使用步驟其實很簡單,只有兩步。 創(chuàng)建一個隊列(串行隊列或并發(fā)隊列)將任務(wù)追加到任務(wù)的...
    CDLOG閱讀 272評論 0 0
  • 1 什么是GCD? Grand Central Dispatch(GCD) 是 Apple 開發(fā)的一個多核編程的較...
    藤王俊采閱讀 323評論 0 1
  • 章節(jié)目錄 什么是GCD? 如何在多條路徑中執(zhí)行CPU命令列? 即使多線程存在很多問題(如數(shù)據(jù)競爭、死鎖、線程過多消...
    DrunkenMouse閱讀 978評論 1 13
  • 1.NSTimer不準(zhǔn)時的原因:(1).RunLoop循環(huán)處理時間,每次循環(huán)是固定時間,只有在這段時間才會去查看N...
    稻春閱讀 1,360評論 0 3

友情鏈接更多精彩內(nèi)容