(一)大概念併發
gcd:使用起來就倆概念異步
1.任務(你想作的事)async
2.隊列(存聽任務)函數
gcd能夠根據你的須要,將你的任務進行排序,來肯定何時執行。spa
(二)小概念(同步異步,併發串行都是啥)線程
同步:在當前線程中執行code
異步:在另外一條線程中執行排序
併發:多個任務併發執行隊列
串行:一個任務執行完畢,再執行下個任務get
(三)上代碼
1.任務執行方式
(1)用同步的方式執行任務(在當前線程執行當前任務)
dispatch_sync(dispatch_queue_t _Nonnull queue, ^(void)block) //1.隊列名稱 2.要執行的block(在裏面寫你要執行的任務)
(2)用異步的方式執行任務(開闢新線程執行當前任務)
dispatch_async(dispatch_queue_t _Nonnull queue, ^(void)block)//1.隊列名稱 2.要執行的block(在裏面寫你要執行的任務)
2.隊列的類型
(1)併發隊列
GCD默認已經提供了全局的併發隊列,供整個應用使用,不須要手動建立
使用dispatch_get_global_queue函數得到全局的併發隊列
dispatch_queue_t dispatch_get_global_queue(dispatch_queue_priority_t priority,unsigned long flags); // 此參數暫時無用,用0便可
第一個參數是優先級 ,第二個參數是之後用的,用0就好了
說明:全局併發隊列的優先級
#define DISPATCH_QUEUE_PRIORITY_HIGH 2 // 高
#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 // 默認(中)
#define DISPATCH_QUEUE_PRIORITY_LOW (-2) // 低
#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN // 後臺
(2)串行隊列
1.使用dispatch_queue_create函數建立串行隊列
dispatch_queue_t dispatch_queue_create(const char *label, dispatch_queue_attr_t attr); // 隊列名稱, 隊列屬性,通常用NULL便可
示例:
dispatch_queue_t queue = dispatch_queue_create("wendingding", NULL); // 建立 dispatch_release(queue); // 非ARC須要釋放手動建立的隊列
2. 使用主隊列
主隊列是GCD自帶的一種特殊的串行隊列,放在主隊列中的任務,都會放到主線程中執行
使用dispatch_get_main_queue()得到主隊列
我以爲這張圖總結的挺好的,只有在使用併發隊列而且異步執行任務的狀況下,所建立的任務纔會併發執行
代碼我也不寫了,比較懶,有啥不懂的 直接問