1. GCD(不是面向線程對象,面向任務開發)程序員
2. 優點
GCD是蘋果公司爲多核的並行運算提出的解決方案
GCD會自動利用更多的CPU內核(好比雙核、四核)
GCD會自動管理線程的生命週期(建立線程、調度任務、銷燬線程)
程序員只須要告訴GCD想要執行什麼任務,不須要編寫任何線程管理代碼
3. 任務和隊列
(1)隊列:隊列用來存聽任務,隊列遵循(FIFO)先進先出原則;
GCD中ti拱了四種隊列:
串行隊列和併發隊列是須要手動建立的
1>串行隊列:用來存放想要按順序執行的任務
2>併發隊列:用來存放想要同時執行的任務
全局併發隊列和主隊列是系統已經建立好的,不須要手動建立
3>全局併發隊列:做用和併發隊列基本同樣,是系統提供的,不須要手動建立
4>主隊列:用來存放在主線程執行的任務
(2)任務:須要執行的代碼,將任務封裝在block中;一個GCD中的block就是一個任務
(3)執行函數:執行函數和隊列配合使用,來開啓線程,肯定任務的執行順序
同步函數:不具有開啓線程的能力,在當前線程執行,達到同步的目的
異步函數:具有開啓線程的能力,可是是否開啓線程還須要和隊列配合使用,達到異步的目的
4. 隊列和執行函數的組合
(1)串行隊列 + 執行函數
同步函數 + 串行隊列:不會開啓新線程,任務按順序執行
異步函數 + 串行隊列:會開啓一條線程,任務按順序執行
(2)併發隊列 + 執行函數
同步函數 + 併發隊列:不會開啓新線程,任務按順序執行
異步函數 + 併發隊列:會開啓多條線程,任務同時執行
(3)主隊列 + 執行函數
同步函數 + 主隊列:卡主主隊列
異步函數 + 主隊列:不會開啓線程,任務在主線程按順序執行
5. 隊列組:保證任務的執行順序
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group,dispatch_get_global_queue(0,0),^{
// 並行執行的線程一
});
dispatch_group_async(group,dispatch_get_global_queue(0,0),^{
// 並行執行的線程二
});
dispatch_group_async(group,dispatch_get_global_queue(0,0),^{
// 並行執行的線程三
});
dispatch_group_notify(group,dispatch_get_global_queue(0,0),^{
// 結果彙總
});