實戰需求
SwiftUI GCD教程之DispatchGroup基礎使用實現同步更新
本文價值與收獲
看完本文后,您將能夠作出下面的界面
看完本文您將掌握的技能
- 掌握 DispatchGroup
基礎知識
DispatchGroup
一個任務組合監控一個獨立的單元,然后我們就可以知道這一組任務什么時候完成了。
class DispatchGroup : DispatchObject
總覽
通過組,您可以聚合一組任務并同步組上的行為。您將多個工作項附加到一個組,并安排它們在同一隊列或不同隊列上異步執行。當所有工作項完成執行時,組將執行其完成處理程序。您也可以同步等待組中的所有任務完成執行。
DispatchQueue
用于管理應用程序主線程或后臺線程上串行或并行執行的任務的類。
class DispatchQueue : DispatchObject
總覽
調度隊列是FIFO隊列,您的應用程序可以以塊對象的形式向其提交任務。調度隊列可以串行或并行執行任務。提交給調度隊列的工作在系統管理的線程池上執行。除了代表應用程序主線程的調度隊列之外,系統無法保證它使用哪個線程來執行任務。
您可以同步或異步計劃工作項。當您同步安排工作項時,您的代碼將等到該項目完成執行。當您異步調度工作項時,您的代碼將繼續執行,而工作項將在其他地方運行。
重要,嘗試在主隊列上同步執行工作項會導致死鎖。
避免過多的線程創建
在設計用于并發執行的任務時,請勿調用會阻塞當前執行線程的方法。當由并發調度隊列調度的任務阻塞線程時,系統會創建其他線程來運行其他排隊的并發任務。如果有太多任務阻塞,則系統可能會耗盡您的應用程序的線程。
應用程序消耗太多線程的另一種方法是創建過多的私有并發調度隊列。因為每個調度隊列都消耗線程資源,所以創建其他并發調度隊列會加劇線程消耗問題。代替創建私有并發隊列,將任務提交到全局并發調度隊列之一。對于串行任務,請將串行隊列的目標設置為全局并發隊列之一。這樣,您可以在最小化創建線程的單獨隊列數量的同時,維護隊列的序列化行為。