Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
多執行緒編程
Search
MarkFly
April 16, 2019
Programming
73
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
多執行緒編程
MarkFly
April 16, 2019
More Decks by MarkFly
See All by MarkFly
關於 Mobile Developer 用 Flutter 去寫 Web 這檔事
mark33699
0
34
關於我在 visionOS 上 寫影片貼圖 app 這檔事
mark33699
0
300
iOS、Android、Flutter超級比一比
mark33699
1
1k
如何使用Swift遙控你的樂高
mark33699
0
68
直播簡單講
mark33699
1
110
演算法到底是在演哪一齣
mark33699
0
83
對戰三平棋
mark33699
0
200
Other Decks in Programming
See All in Programming
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
140
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
480
golang-bob.pdf
iwatsukayura
0
130
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
JRuby: Past, Present, and Future
headius
0
230
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
370
最近”作らせてる” ローカルAIアプリの話
akit37
0
450
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
590
The Rails Doctrine Decade
koic
2
570
mrbgem 三角測量 開発
ogom
0
240
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
160
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
330
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
Believing is Seeing
oripsolob
1
240
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
870
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
560
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
Typedesign – Prime Four
hannesfritz
42
3.2k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Abbi's Birthday
coloredviolet
4
10k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
620
Transcript
Parallel Programming
Serial Queues vs Concurrent Queues
SERIAL QUEUES • 同⼀時間只執⾏⼀個任務 • 保證對共享資源的順序訪問,避免競爭條件 串列佇列
CONCURRENT QUEUES • 同⼀時間會執⾏多個任務 • 它們啟動的順序就是它們加入隊列的順序 • 執⾏時間和完成時間是不盡相同的 • 無法得知執⾏時間或者某⼀時刻被執⾏的任務數
並列佇列
Synchronous vs ASynchronous
SYNCHRONOUS • 不是⼀起執⾏的意思喔 • 任務加到隊列後,等到任務完成,線程才會返回繼續執⾏ • 所以會塞⾞ 同步執⾏
ASYNCHRONOUS • 反正跟上⼀個相反就對了 異步執⾏
GCD vs NSOperationQueue
GCD • Grand Central Dispatch • 以前語法 Like C, 但在Swift3語法有所改變
• init時要給個string當作識別⽤ • ⽤ .sync{} 或 .async{} 決定同步或異步 • 延遲執⾏⽤ .asyncAfter{}
GCD • qos: .userInteractive > userInitiated > default > utility
> background > unspecified • attributes: 都不給就是serial, 也可設為concurrent或initiallyInactive • 不⽤實例也可以, 如: DispatchQueue.main.async{}
你⼀⾔我⼀語?
NSOperationQueue • 把NSOperation放到NSOperationQueue裡⾯去執⾏(採concurrent) • 可以把NSOperationQueue暫停(把.isSuspended改為true), 但執⾏中 的任務不受影響 • NSOperation的⼦類NSBlockOperation 跟
NSInvocationOperation • NSOperationQueuePriority: > userInitiated > default > utility > background > unspecified • 可為任務添加依賴性addDependency(誰做完才做誰) • .dependencies列出該任務依賴的對象
NSOperationQueue • 可以把整個隊列上所有的任務都取消, 或只取消某個任務, 當call cancel()時, 可 能有三種情況 • 還沒執⾏:輪到該任務時將不會被執⾏
• 執⾏中:系統不會強制終⽌, 但會把isCancelled改為true • 已執⾏完成:什麼也不做 • 任務的狀態 • .isReady:取決於是否相依的任務是否已完成 • .isExecuting • .isFinished:執⾏completionBlock且移出隊列 • .isCancelled:被依賴的任務還是會執⾏
會造成什麼問題? • 競爭條件(Race Condition) 就是多個線程同時搶奪同⼀個資源, 導致數據與預期不同 • 優先倒置(Priority Inversion) 就是優先權較低的任務佔住了資源,
導致優先權較⾼的任務反⽽比較晚執⾏ • 死鎖問題(Dead Lock) 就是兩個任務互相等待彼此的資源, 導致兩個任務都無法結束(有點像retain cycle) • 活鎖問題(Live Lock) 就是死鎖的特例, 資源的狀態不斷改變, 雖有釋放, 但還是沒有進展
讓Xcode助你⼀臂之⼒
參考資料 • Swift 3學習指南:重新認識GCD應⽤ https://www.appcoda.com/grand-central-dispatch/ 16/08/11 • iOS 並⾏程式設計: 初探
NSOperation 和 Dispatch Queues https://www.appcoda.com.tw/ios-concurrency/ 15/12/09 • 平⾏程式設計可能會帶來甚麼問題? https://www.appcoda.com.tw/parallel-programming/ 18/06/26 • iOS⾯試之道第四章第四節
謝騰⾶ iOS Developer