iOS GCD概念介紹

GCD

是蘋果提出的多線程并行運(yùn)算的高效解決方案,GCD能自動利用CPU多個內(nèi)核,自動管理線程的生命周期;
API一般以dispatch為前綴,例如常用的dispatch_async

任務(wù)

GCD中的任務(wù)使用block來執(zhí)行,例如下面代碼是創(chuàng)建異步執(zhí)行一個任務(wù):

dispatch_async(queue, ^{
// block里放異步執(zhí)行的任務(wù)代碼
});

隊(duì)列(Queue)

指執(zhí)行任務(wù)的等待隊(duì)列,既用來存放任務(wù)的隊(duì)列。
隊(duì)列是一張?zhí)厥獾谋?,采用FIFO(先進(jìn)先出)的原則,
新任務(wù)總是排在隊(duì)列的末尾,讀取任務(wù)則是從隊(duì)列的頭部開始。
隊(duì)列分兩種:串行隊(duì)列并發(fā)隊(duì)列
兩者都符合FIFO(先進(jìn)先出)的原則
兩者的區(qū)別是:執(zhí)行順序不同,開啟的線程數(shù)不同。

隊(duì)列分主線程隊(duì)列和全局并發(fā)隊(duì)列(背景線程隊(duì)列)
主線程隊(duì)列
dispatch_queue_t queue = dispatch_get_main_queue();
在主線程中執(zhí)行的Dispatch Queue,因?yàn)橹骶€程只有一個,所以主線程隊(duì)列是串行隊(duì)列。
追加到主線程隊(duì)列的處理在主線程的RunLoop中執(zhí)行。
全局并發(fā)隊(duì)列
有四個優(yōu)先級:高優(yōu)先級、默認(rèn)優(yōu)先級、低優(yōu)先級、后臺優(yōu)先級
dispatch_queue_t queue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
優(yōu)先級越高,代表在全局并發(fā)隊(duì)列中優(yōu)先執(zhí)行
參數(shù)1:隊(duì)列優(yōu)先級
參數(shù)2:保留參數(shù),用 0 即可

執(zhí)行

GCD執(zhí)行任務(wù)有兩種方式:同步執(zhí)行異步執(zhí)行
兩者的區(qū)別是:是否等待隊(duì)列的任務(wù)執(zhí)行結(jié)束,是否開啟新的線程
同步執(zhí)行調(diào)用dispatch_sync方法
異步執(zhí)行調(diào)用dispatch_async方法

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

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

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