gcd是蘋果推出的多線程處理技術。
什么是線程呢,線程是cpu執行的匯編指令集合,由于一個cpu一次只能執行一個命令,不能在某處分開并行2個命令,因此通過cpu執行的cpu命令列就好比一條沒有分叉的路。
現在的物理cpu芯片實際上有64個(64核)cpu,如果一個cpu核虛擬成2個cpu工作,那么pc上使用多個cpu核是很常見的。
osx和ios核心xnu內核在發生系統操作事件時會切換執行路徑。執行路徑的狀態(例如cpu寄存器等信息保存到各自路徑專用的內存快中,從切換目標路徑專用的內存塊中,復原cpu寄存器等信息,繼續執行切換路徑的cpu命令列,這被稱為“上下文切換”。)
正是這么的反復多次在上下文中切換就看上去是一個cpu在執行多個線程一樣,對于多核cpu是真正的在執行多個線程,而不是看上去像。
1.Dispatch Queue 隊列(fifo)分為Serial Diapatch Queue (單)和 Concurrent Dispatch Queue(多)
2.dispatch_queue_creat 通過gcd的api生成的使用到creat的所以API都要 記得釋放。dispatch_release,
對main和globel進行release和retain不起作用。所以使用它們2個時不用release。線程分為4個等級。但是沒什么用。
3.dispatch_set_target_queue設置其等級。該等級還可以作為Dispatch Queue的執行階層。
4.dispatch_after 等待多久后追加block到queue中。
5.dispatch_group 多個處理全部結束和想執行結果處理。用notify回調UI線程。
6.dispatch_barrier_async 柵欄,可避免數據競爭的問題。
7.dispatch_apply 多次執行某一個任務。
8.dispatch_suspend/resume 線程掛起和恢復。(ios10.1出現了dispatch_cancel)
9.dispatch_semaphore 數據競爭處理,比6中的柵欄顆粒度高。
10.dispatcch_once 百分百只執行一次
11.dispatchi/o 讀取大文件時,將文件分成段讀取。
12.dispatch source 系統內核發生各種事件時,在應用程序編程方執行處理的技術。(例如 文件的讀取,定時器、接收信號等)
想詳細了解去看看小日本寫的那本《多線程與內存管理》哈。小日本的東西寫的就是好,不服不行啊。