天天看點

iOS 多線程GCD-栅欄函數

送出一個栅欄函數在同步執行中,它會等待栅欄函數執行完再去執行下一行代碼(注意是下一行代碼),同步栅欄函數是在主線程中執行的

dispatch_barrier_sync(dispatch_queue_t queue, dispatch_block_t blcok);

送出一個栅欄函數在異步執行中,它會立馬傳回開始執行下一行代碼(不用等待任務執行完畢)

dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t blcok);

(1)串行隊列+同步執行

因為是同步執行,是以不建立新的線程,在主線程中執行。

因為是串行隊列,是以隊列的任務一個接一個地執行并且任務一加入隊列就立馬執行

(2)串行隊列+異步執行

因為是異步執行,是以建立了新的線程。

因為是串行隊列,是以隊列中的任務一個接一個執行。并且任務不是添加到隊列之後立馬執行,而是當所有任務添加到隊列之後再執行。

3)并發隊列+同步執行

因為是同步執行,不建立新的線程,在主線程中執行。

雖然是并發隊列,但因為是同步執行,沒有展現出并發性,任務還是一個接一個執行。并且任務一加入隊列就立馬執行。

(4)并發隊列+異步執行

因為異步執行,是以建立了新的線程。

因為并發隊列,異步執行時展現其并發性,任務之間交替着同時執行。并且任務不是添加到隊列之後立馬執行,而是當所有任務添加到隊列之後再執行。