search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

iOS多線程開發之離不開的GCD

一、GCD基本概念

GCD 全稱Grand Central Dispatch(大中樞隊列調度),是一套低層API,提供了⼀種新的方法來進⾏併發程序編寫。從基本功能上講,GCD有點像NSOperationQueue,他們都允許程序將任務切分為多個單一任務,然後提交⾄⼯作隊列來併發的或者串⾏的執行。GCD是C實現,⽐NSOpertionQueue更底層更高效,並且它不是Cocoa框架的一部分 併發任務會像NSOperationQueue那樣基於系統負載來合適地併發進⾏,而串⾏行隊列同一時間只執行單一任務,GCD的API很大程度上基於block。

GCD併發編程的主要好處歸納

  • GCD可用於多核的并行運算
  • GCD會自動利用更多的CPU內核(比如雙核、四核)
  • GCD會自動管理線程的生命周期(創建線程、調度任務、銷毀線程)
  • 程序員只需要告訴GCD想要執行什麼任務,不需要編寫任何線程管理代碼

二、GCD如何實現

GCD主要由隊列和任務兩部分來實現,蘋果官方對GCD是這樣說明的:開發者要做的只是定義想執行的任務並追加到適當的Dispatch Queue中。Dispatch Queue是執行處理的等待隊列,我們可以通過dispatch_async等API,在block語法中記述想要執行的處理並將其追加到Dispatch Queue中,Dispatch Queue是按照追加的順序進行處理(先進先出FIFO)。

多線程執行過程就是把任務放在隊列中去執行的過程。那麼在這裡我們首先回顧一下基本概念:

(一)進程/線程、任務/隊列

(二)同步/非同步、併發/并行

併發不一定等於并行

(三)非同步/同步任務 & 并行/串列隊列的特點

綜上所述,iOS多線程編程使用GCD的最優原則是能不在阻礙主線程(又叫作UI線程)的情況下,開啟新的線程(子線程)去處理耗時的操作,以便有效提高程序的執行效率和資源利用率,但是同時開啟多個子線程也會引發許多其他的問題,如資源競爭、死鎖、內存損耗等,所以要注意,這篇文章只是介紹GCD的使用,因此可能產生的問題我將會在這個系列後續篇章做介紹。

GCD併發編程產生的作用歸納(考慮線程安全,不死鎖的情況下效果):

  • 能開啟新的線程(子線程)

  • 多個任務可以同時進行

  • 不會阻塞主線程(又叫作UI線程)影響UI事件

三、GCD如何使用

開發者要做的只是定義想執行的任務並追加到適當的隊列(Dispatch Queue)中

1、創建隊列(Dispatch Queue)

第一種:通過GCD的API的dispatch_queue_create函數生成Dispatch Queue

另外需要注意的點是:雖然有ARC編譯器自動管理內存這一優秀技術,但生成的Dispatch Queue必須由程序員主動釋放。

第二種:直接使用系統提供的標準Dispatch Queue :Main Dispatch Queue和Global Dispatch Queue

(1)Main Dispatch Queue:主線程中執行的Dispatch Queue,也就是Serial Dispatch Queue(串列隊列),可以通過dispatch_get_main_queue來獲取。

(2) Global Dispatch Queue: 全局併發隊列(Concurrent Dispatch Queue),GCD默認提供了全局的併發隊列,可以通過dispatch_get_global_queue獲取。

2、創建任務

四、隊列任務組合

根據(二)中描述,GCD由隊列和任務兩部分組成,隊列分為串列隊列、并行隊列、主隊列,任務可分為同步和非同步任務,這樣可將隊列與任務組合如下:

1、并行隊列 & 非同步執行

列印結果:

結論:

(1) 開啟了新線程

(2) 任務之間不需要排隊,且具有同時被執行的權利

2、并行隊列 & 同步執行

列印結果:

結論:

(1) 不開啟了新線程

(2) 任務之間需要排隊,按照追加順序執行

3、串列隊列 & 非同步執行

(1) 開啟了新線程

(2) 任務之間需要排隊,按照追加順序執行

4、串列隊列 & 同步執行

列印結果:

結論:

(1) 不開啟了新線程

5、主隊列 & 非同步執行

列印結果:

結論:

(1) 不開啟了新線程

(2) 任務之間需要排隊,按照追加順序執行

6、主隊列 & 同步執行

列印結果:

結論:

發生死鎖,程序崩潰。

好了GCD系列的上篇就寫到這裡,我將在後續系列中詳細介紹GCD的隊列系列和用法,以及使用GCD可能造成的問題及解決方案,水平有限,有不對的地方還望批評指正!



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦