GCD入門介紹一
什麼是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建立佇列。
相關文章
- Azure Cosmos DB (一) 入門介紹
- NodeJs 入門到放棄 — 入門基本介紹(一)NodeJS
- Mybatis 入門介紹MyBatis
- Rocketmq 入門介紹MQ
- libevent入門介紹
- Django 入門介紹Django
- linux介紹(入門)Linux
- Nginx 入門介紹Nginx
- rollup入門介紹
- 比特幣入門一基礎介紹比特幣
- 【Ionic2系列】 一、入門介紹
- Spring Shell入門介紹Spring
- 原創:spring入門介紹第一講Spring
- Java爬蟲入門(一)——專案介紹Java爬蟲
- iOS GCD入門和GCD對CPU多核的使用iOSGC
- 『python入門:』 python的介紹Python
- WebSocket協議入門介紹Web協議
- 整合學習入門介紹
- 網路流量預測入門(一)之RNN 介紹RNN
- IOS 初級開發入門教程(一)介紹篇iOS
- MapStruct的介紹及入門使用Struct
- Movie Collector pro for Mac入門介紹Mac
- MySQL儲存引擎入門介紹MySql儲存引擎
- Android入門教程 | AsyncTask 使用介紹Android
- java語言的入門介紹Java
- ffmpeg-入門介紹(筆記)筆記
- ARouter簡單入門和介紹
- 手摸手帶你入門ionic3(一):ionic介紹
- day01-Mybatis介紹與入門MyBatis
- UML 架構圖入門介紹 starUML架構
- 【Threejs系列】-如何快速入門前置介紹JS
- webpack 學習筆記:入門介紹Web筆記
- 區塊鏈入門知識介紹!區塊鏈
- Oracle認證介紹及入門心得Oracle
- MySQL入門--複製技術介紹MySql
- EVE-NG簡單入門介紹
- gitbook 入門教程之外掛介紹Git
- ZipKin原理學習--ZipKin入門介紹
- rocketmq事務訊息入門介紹MQ