GCD是Grand Central Dispatch的縮寫。其包含了語言特性、runtime libraries以及提供系統級、綜合提高的系統增強功能在iOS和OSX 系統上多核的硬件來支持並行執行代碼。GCD會負責創建線程和調度執行你寫的功能代碼。系統直接提供線程管理,比應用添加線程更加高效,因此使用GCD能夠帶來很多好處,例如使用簡單、而且更加高效,允許你同步或者一部執行任意的代碼block。但是使用它也必須注意一些問題,由於其實現是基於c語言的API,因此沒有異常捕獲、異常處理機制,所以它不能捕獲高層語言產生的異常。使用GCD時必須在將block提交到dispatch queue中之前捕獲所有異常,並解決所有異常。
說到底,GCD就是系統來幫用戶來管理線程,而不需要再編寫線程代碼。程序員只需要專心編寫執行某項功能的代碼,添加到block或方法(函數)中,然後可以有下面兩種方式來處理block或方法(函數)。
1.直接將block加入到dispatch queues,
2.將Dispatch source封裝為一個特定類型的系統事件,當系統事件發生時提交一個特定的block對象或函數到dispatch queue,
然後,Dispatch queue 按先進先出的順序, 串行或並發地執行任務。
這裡,Dispatch queue是一個基於C的執行自定義任務機制,而Dispatch source是基於C的系統事件異步處理機制,一般Dispatch source封裝一個特定類型的系統事件,該事件作為某個特定的block對象或函數提交到Dispatch queue中的前提條件。Dispatch source可以監控的系統事件類型有:
定時器
信號處理器
描述符相關的事件
進程相關的事件
Mach port事件
你觸發的自定義事件
而對於Dispatch Queues,其可以分為三種:
串行Queue
並發隊列
main dispatch queue
如果使用 dispatch queue,與執行相同功能的多線程相比,最直接的優點是簡單,不用編寫線程創建和管理的代碼,讓你集中精力編寫實際工作的代碼。另外系統管理線程更加高效,並且可以動態調控所有線程。