記錄學習內容。看網路上大大們的文章和影片,做些紀錄。
把這邊當作寫筆記的地方,內容可能有錯誤。
教學來源
When to Semaphore vs Dispatch Group! Careful Multithreaded Shared Resource
先看什麼是GCD :
整理:
2
GCD(Grand Central Dispatch) 有四個東西:
Serial(照順序排列的) Queues :一次一個東西
Concurrent(同時進行的)Queues :一次多個東西
Synchronous(同步) :用原本的執行緒
Asynchronous(非同步) : 開新執行緒
文章中的這張圖很清楚:
3
看到dispatch groups 這個名詞了
文章有範例 ,就是說DispatchGroup()
在 進入async 前 先DispatchGroup().enter()
然後async { 最後面放 DispatchGroup().leave() }
最後如果要知道 全部的工作完成 ,就寫這個
group.notify(queue: DispatchQueue.main) {
print("完成所有 Call 後端 API 的動作...")
}
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