簡介gcd

基本概念

什麼是GCD?

Grand Central Dispatch或者GCD,是一套低層API,提供了一種新的方法來進行併發程序編寫。從基本功能上講,GCD允許程序將任務切分爲多個單一任務然後提交至工作隊列來併發地或者串行地執行。GCD比之NSOpertionQueue更底層更高效,並且它不是Cocoa框架的一部分。

除了代碼的平行執行能力,GCD還提供高度集成的事件控制系統。

GCD的API很大程度上基於block,當然,GCD也可以脫離block來使用,比如使用傳統c機制提供函數指針和上下文指針。實踐證明,當配合block使用時,GCD非常簡單易用且能發揮其最大能力。

爲何使用?

GCD提供很多超越傳統多線程編程的優勢:                                                                                                                                                                 易用: GCD比之thread跟簡單易用。                                                                                                                                                                               效率: GCD被實現得如此輕量和優雅,使得它在很多地方比之專門創建消耗資源的線程更實用且快速。                                                                           性能: GCD自動根據系統負載來增減線程數量,這就減少了上下文切換以及增加了計算效率。                                                                                                                                                                                                                                                    

GCD中有三種隊列類型:

  1. The main queue: 與主線程功能相同。實際上,提交至main queue的任務會在主線程中執行。main queue可以調用dispatch_get_main_queue()來獲得。因爲main queue是與主線程相關的,所以這是一個串行隊列。
  2. Global queues: 全局隊列是併發隊列,並由整個進程共享。進程中存在三個全局隊列:高、中(默認)、低、後臺四個優先級隊列。可以調用dispatch_get_global_queue函數傳入優先級來訪問隊列。優先級:

    #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

  3. 用戶隊列: 用戶隊列 (GCD並不這樣稱呼這種隊列, 但是沒有一個特定的名字來形容這種隊列,所以我們稱其爲用戶隊列) 是用函數 dispatch_queue_create 創建的隊列. 這些隊列是串行的。
                                     

多核心的性能

概念

爲了在單一進程中充分發揮多核的優勢,我們有必要使用多線程技術。在低層,GCD全局dispatch queue僅僅是工作線程池的抽象。這些隊列中的Block一旦可用,就會被dispatch到工作線程中。提交至用戶隊列的Block最終也會通過全局隊列進入相同的工作線程池(除非你的用戶隊列的目標是主線程,但是爲了提高運行速度,我們絕不會這麼幹)。

有兩種途徑來通過GCD“榨取”多核心繫統的性能:將單一任務或者一組相關任務併發至全局隊列中運算;將多個不相關的任務或者關聯不緊密的任務併發至用戶隊列中運算;

                                              

                                                                                     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章