GCD入門介紹一

jingxianli0922發表於2015-11-25

什麼是GCD?

Grand Central Dispatch是一套底層API,提供一種新的方法進行並行程式編寫。GCD跟NSOperationQueue比較像,它允許程式將任務切分為多個單一任務然後提交到工作佇列中併發地或者序列地執行。GCD比NSOpertaionQueue更底層更高效,並且它不是Cocoa框架的一部分。

GCD的API很大程度上基於block,當然,GCD也可以脫離block來使用,比如使用系統c機制提供函式指標和上下文指標。GCD一般與block配合使用時,能發揮其最大能力。

GCD的優勢

1.易用:GCD比NSThread簡單易用。由於GCD基於work unit而非像thread那樣基於運算,所以GCD可以控制諸如等待任務結束、監視檔案描述符、週期執行程式碼以及工作掛起等任務。基於block的GCD,讓它能極為簡單得在不同程式碼作用域之間傳遞上下文。

2.效率:GCD被實現得如此輕量和優雅,使得它在很多地方比之專門建立消耗資源的執行緒更實用且快速。

3.效能:GCD自動根據系統負載來增減執行緒數量,減少了上下文切換以及增加了計算效率。

Dispatch Objects

GCD是純C語言的,它被組建成物件導向的風格。GCD物件被稱為Dispatch object。Dispatch object像Cocoa物件一樣是引用計數的。使用dispatch_release和dispatch_retain函式來操作dispatch object的引用計數來進行記憶體管理。

Dispatch Queues

GCD的基本概念就是dispatch queue。dispatch queue是一個物件,它可以接受任務,並將任務以先到先執行的順序來執行。dispatch queue可以是併發的或者序列的,併發任務會像NSOperationQueue那樣基於系統負載來合適地併發進行,序列佇列同一時間只執行單一任務。

GCD中三種佇列型別:

1.Main queue:與主執行緒功能相同。實際上,提交到main queue的任務會在主執行緒中執行。main queue可以呼叫dispatch_get_main_queue()來獲得。

2.Global queues:全域性佇列是併發佇列,並由整個程式共享。程式中存在三個全域性佇列:高、中(預設)、低三個優先佇列。通過dispatch_get_global_queue函式傳入優先順序來訪問佇列。

3.使用者佇列:dispatch_queue_create建立佇列。


相關文章