GCD中的串行,并行,同步,異步

首先,串行并行針對的是隊列,同步異步針對的是任務(wù);如果覺得隊列和任務(wù)不太好理解咱們可以打個比方,假設(shè)一個應(yīng)用程序是一個工廠,那隊列就是里面的流水線以及線上的工人,而流水線上的工人所要處理的產(chǎn)品就是所謂的任務(wù)。

串行,并行
系統(tǒng)會給每個應(yīng)用自動分配兩個隊列:

  1. dispatch_get_main_queue() 串行隊列 處理UI,也可以叫串行主隊列,這個隊列會排在主線程中。

  2. dispatch_get_global_queue(優(yōu)先級, 擴展)并行隊列。

當(dāng)然根據(jù)需求也可以自己主動創(chuàng)建隊dispatch_queue_create(隊列標(biāo)簽, 串行/并行)。

注意:串行queue每次只能執(zhí)行一個任務(wù),可以使用它來代替鎖,保護共享資源或可變的數(shù)據(jù)結(jié)構(gòu),串行queue確保任務(wù)按可預(yù)測的順序執(zhí)行(這是比鎖好的地方)

同步和異步

  1. 異步調(diào)度 dispatch_async : 把一個任務(wù)添加到某queue后就馬上離開,而不管任務(wù)在那個queue里的執(zhí)行狀態(tài)

  2. 同步調(diào)度 dispatch_sync : 把一個任務(wù)添加到某queue后,等這個任務(wù)完成,調(diào)用線程才繼續(xù)執(zhí)行.

所以,異步調(diào)度和同步調(diào)度的區(qū)別不在于被添加的任務(wù)怎樣執(zhí)行,而在于調(diào)用線程是否等待任務(wù)執(zhí)行完。

最后編輯于
?著作權(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)容

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