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方法