iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0
Mobile Development

iOS學習資源與筆記系列 第 19

Dispatch Group 、Semaphore

  • 分享至 

  • xImage
  •  

記錄學習內容。看網路上大大們的文章和影片,做些紀錄。
把這邊當作寫筆記的地方,內容可能有錯誤。

教學來源
When to Semaphore vs Dispatch Group! Careful Multithreaded Shared Resource

先看什麼是GCD :

GCD 多執行緒的說明與應用

整理:

1 GCD(Grand Central Dispatch) :Apple的多執行緒套件

2
GCD(Grand Central Dispatch) 有四個東西:
Serial(照順序排列的) Queues :一次一個東西
Concurrent(同時進行的)Queues :一次多個東西
Synchronous(同步) :用原本的執行緒
Asynchronous(非同步) : 開新執行緒

文章中的這張圖很清楚:
https://miro.medium.com/max/700/1*JKqTI1w-rm9U_MtALbLHDA.png

3
看到dispatch groups 這個名詞了
文章有範例 ,就是說DispatchGroup()
在 進入async 前 先DispatchGroup().enter()
然後async { 最後面放 DispatchGroup().leave() }

最後如果要知道 全部的工作完成 ,就寫這個

group.notify(queue: DispatchQueue.main) {
print("完成所有 Call 後端 API 的動作...")
}

4 Quality of service(QoS) 是 設定執行緒的優先順序

5
兩秒之後去執行某個事情 :

delayQueue.asyncAfter(deadline: DispatchTime.now() + 2) {
  print("After 2 seconds")
}

這篇文章講的蠻詳細的:
iOS 多线程:『GCD』详尽总结

接著在回到教學影片:
在 Dispatch Group 裡面放多個執行緒
。如果要讓這多個執行緒 照順序 執行 ,在用DispatchSemaphore ()控制

留言區底下有說

1 DispatchSemaphore () 比較常用的功能可能是mutual exclusion and conditional concurrency。
像是有兩個人同時對 自己的銀行帳號 做修改 。
我 拿了50塊(-50) ,公司給我 100塊薪水(+100) 。
那結果 可能是 +100 、-50 、50 。
我們只希望結果是50 ,所以需要 DispatchSemaphore

2
還有講到可以用NSOperation and NSOperationQueue 。

之後再來了解NSOperation and NSOperationQueue:
NSOpertation 與 NSOperationQueue


上一篇
Coordinator pattern
下一篇
OAuth 2.0 and OpenID Connect
系列文
iOS學習資源與筆記28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言