Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
多執行緒編程
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
MarkFly
April 16, 2019
Programming
58
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
20
關於我在 visionOS 上 寫影片貼圖 app 這檔事
mark33699
0
170
iOS、Android、Flutter超級比一比
mark33699
1
990
如何使用Swift遙控你的樂高
mark33699
0
67
直播簡單講
mark33699
1
99
演算法到底是在演哪一齣
mark33699
0
74
對戰三平棋
mark33699
0
170
Other Decks in Programming
See All in Programming
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
650
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
540
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
170
What's New in Android 2026
veronikapj
0
150
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
170
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
500
Android CLI
fornewid
0
130
act2-costs.pdf
sumedhbala
0
120
【やさしく解説 設計編 #1】「ドメイン駆動」と「実装駆動」ってなに? 〜設計の考え方を、たとえ話で学ぼう〜
panda728
PRO
1
120
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
160
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
2
630
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.2k
Featured
See All Featured
Un-Boring Meetings
codingconduct
0
350
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
410
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
510
Measuring & Analyzing Core Web Vitals
bluesmoon
9
900
Become a Pro
speakerdeck
PRO
31
6k
WENDY [Excerpt]
tessaabrams
11
38k
Site-Speed That Sticks
csswizardry
13
1.3k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
First, design no harm
axbom
PRO
2
1.2k
Accessibility Awareness
sabderemane
1
160
Building Flexible Design Systems
yeseniaperezcruz
330
40k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
220
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