一.簡介編程
GCD (Grand Central Dispatch)是Apple開發的多核編程的解決方法。app
二.優勢異步
1.GCD可用於多核的並行運算async
2.GCD自動利用更多CPU內核(雙核,四核)spa
3.GCD自動管理線程的生命週期(建立線程、調度任務、銷燬線程) ,只須要告訴GCD想要執行什麼任務,不須要編寫任何線程管理代碼線程
三.使用code
1.建立一個隊列(串行隊列或並行隊列)生命週期
// 串行隊列的建立方法隊列
dispatch_queue_t queue= dispatch_queue_create("test.queue", DISPATCH_QUEUE_SERIAL);開發
// 並行隊列的建立方法
dispatch_queue_t queue= dispatch_queue_create("test.queue", DISPATCH_QUEUE_CONCURRENT);
//主隊列 GCD自帶的一種特殊的串行隊列
//全部放在主隊列中的任務,都會放到主線程中執行
//可以使用dispatch_get_main_queue()
得到主隊列
dispatch_queue_t queue = dispatch_get_main_queue();
2.將任務添加到隊列中,而後系統就會根據任務類型執行任務(同步執行或異步執行)
// 同步執行任務建立方法
dispatch_sync(queue, ^{
// 這裏聽任務代碼
});
// 異步執行任務建立方法
dispatch_async(queue, ^{
// 這裏聽任務代碼
});
原理圖表:
並行隊列 | 串行隊列 | 主隊列 | |
---|---|---|---|
同步(sync) | 沒有開啓新線程,串行執行任務 | 沒有開啓新線程,串行執行任務 | 沒有開啓新線程,串行執行任務 |
異步(async) | 有開啓新線程,並行執行任務 | 有開啓新線程(1條),串行執行任務 | 沒有開啓新線程,串行執行任務 |
四.其餘使用
GCD的柵欄方法dispatch_barrier_async
GCD的延時執行方法dispatch_after
GCD的一次性代碼(只執行一次)dispatch_once
GCD的快速迭代方法dispatch_apply
GCD的隊列組 dispatch_group