文章目錄
-
-
- 1.隊列
- 2.栅欄函數
- 3. 排程組
- 3.信号量
- Dispatch_Source
-
GCD : 純C語言,自動利用更多的CPU核心,自動管理線程的生命周期(建立線程,排程任務,銷毀線程)
1.隊列
-主隊列
專門用來在主線程上排程任務的隊列
不會開啟新線程
如果目前主線程正在有任務執行,那麼無論主隊列中目前被添加了什麼任務,都不會被排程
dispatch_get_main_queue();
- 全局隊列
為了友善程式員的使用,蘋果提供了全局隊列 dispatch_get_global_queue(0, 0)
全局隊列是一個并發隊列
在使用多線程開發時,如果對隊列沒有特殊需求,在執行異步任務時,可以直接使用全局隊列
2.栅欄函數
- 栅欄函數隻對自己定義的并發隊列有效果
- 保證順序執行
- 保證線程安全
- dispatch_barrier_sync/async 之前的任務執行完了才能執行執行這個函數
3. 排程組
- 所有加入排程組的任務都完成了之後,才會執行通知的函數
- 結果
3.信号量
- 代碼
- 信号量的初始值為0
- 當程式走到dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);時,因為信号量為0,是以一直等待着,不往後執行
知道某個線程完成了任務,dispatch_semaphore_signal(semaphore); 信号量會+1
信号量為1了,那麼某個dispatch_semaphore_wait會往下執行,并且把信号量減一
- 結果
Dispatch_Source
- GCD定時器不依靠runloop,而是依靠核心,是以時間更準