Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Intr
oduc
ing
ConcurrencyIntroduction
Concurrencyis
HARD
What is Concurrency?
Multiple tasks taking place simultaneously Utilises multi-core CPUs Can make apps much more responsive Traditionally uses a threading model
Issues with multi-threading
Easy to get wrong Difficult to debug Specific scenarios Race condition Priority inversion Deadlock
Race Condition
time
Value 1
Thread 1
Thread 2
inc
Race Condition
time
Value 1 1
Thread 1
Thread 2
inc r1
Race Condition
time
Value 1 1 1
Thread 1
Thread 2
inc r1 +1
Race Condition
time
Value 1 1 1 2
Thread 1
Thread 2
inc r1 w2+1
Race Condition
time
Value 1 1 1 2 2
Thread 1
Thread 2
inc r1 w2+1
inc
Race Condition
time
Value 1 1 1 2 2 2
Thread 1
Thread 2
inc r1 w2+1
inc r2
Race Condition
time
Value 1 1 1 2 2 2 2
Thread 1
Thread 2
inc r1 w2+1
inc r2 +1
Race Condition
time
Value 1 1 1 2 2 2 2 3
Thread 1
Thread 2
inc r1 w2+1
inc r2 w3+1
Race Condition
time
Value 1
Thread 1
Thread 2
inc
Race Condition
time
Value 1 1
Thread 1
Thread 2
inc r1
inc
Race Condition
time
Value 1 1 1
Thread 1
Thread 2
inc r1
inc r1
Race Condition
time
Value 1 1 1 1
Thread 1
Thread 2
inc r1
inc r1 +1
Race Condition
time
Value 1 1 1 1 2
Thread 1
Thread 2
inc r1
inc r1 w2+1
Race Condition
time
Value 1 1 1 1 2 2
Thread 1
Thread 2
inc r1 +1
inc r1 w2+1
Race Condition
time
Value 1 1 1 1 2 2 2
Thread 1
Thread 2
inc r1 w2+1
inc r1 w2+1
Priority Inversion
time
low
priority
resource
Priority Inversion
time
low
priority
resource 🔒
Priority Inversion
time
low
medium
priority
resource 🔒
Priority Inversion
time
low
medium
highpriority
resource 🔒
Priority Inversion
time
low
medium
highpriority
resource 🔒
Priority Inversion
time
low
medium
highpriority
resource 🔒
Priority Inversion
time
low
medium
highpriority
resource 🔒 🔒
Deadlock
timeresource1
resource2
Thread 1
Thread 2
Deadlock
timeresource1
resource2
Thread 1
Thread 2
Deadlock
timeresource1
resource2
Thread 1
Thread 2
🔒
Deadlock
timeresource1
resource2
Thread 1
Thread 2
🔒
🔒
Deadlock
timeresource1
resource2
Thread 1
Thread 2
🔒
🔒
Deadlock
timeresource1
resource2
Thread 1
Thread 2
🔒
🔒
Deadlock
timeresource1
resource2
Thread 1
Thread 2
🔒
🔒
Deadlock
timeresource1
resource2
Thread 1
Thread 2
🔒
🔒
Tasks & Queues
Simpler abstraction Scales with system and conditions Lower overhead Serial queues include intrinsic locking
Tasks & Queues
Thread 1
Thread 2
Queue
Tasks & Queues
Thread 1
Thread 2
Queue
Tasks & Queues
Thread 1
Thread 2
Queue
Tasks & Queues
Thread 1
Thread 2
Queue
Tasks & Queues
Thread 1
Thread 2
Queue
Tasks & Queues
Thread 1
Thread 2
Queue
Tasks & Queues
Thread 1
Thread 2
Queue
Act I: NSOperation
NSOperation NSOperationQueue Async Operations Dependencies Cancellation NSOperation in Practice
Act II: Grand Central Dispatch
Fire & Forget with GCD Dispatch Groups Thread-safe resources GCD Delights
Where to go from here?
📼⌀⌁⌂⌃⌄⌅⌆⌇⌈⌉⌊⌋⌌⌍⌎⌏⌐⌑⌒⌓⌔⌕⌖⌗⌘⌙⌚⌛⌜⌝⌞⌟⌠⌡⌢⌣⌤⌥⌦⌧⌨⟨⟩⌫⌬⌭⌮⌯⌰⌱⌲⌳⌴⌵⌶⌷⌸⌹⌺⌻⌼⌽⌾⌿⍀⍁⍂⍃⍄⍅⍆⍇⍈⍉⍊⍋⍌⍍⍎⍏⍐⍑⍒⍓⍔⍕⍖⍗⍘⍙⍚⍛⍜⍝⍞⍟⍠⍡⍢⍣⍤⍥⍦⍧⍨⍩⍪⍫⍬⍭⍮⍯⍰⍱⍲⍳⍴⍵⍶⍷⍸⍹⍺⍻⍼⍽⍾⍿⎀⎁⎂⎃⎄⎅⎆⎇⎈⎉⎊⎋⎌⎍⎎⎏⎐⎑⎒⎓⎔⎕⎖⎗⎘⎙⎚⎛⎜⎝⎞⎟⎠⎡⎢⎣⎤⎥⎦⎧⎨⎩⎪⎫⎬⎭⎮⎯⎰⎱⎲⎳⎴⎵⎶⎷⎸⎹⎺⎻⎼⎽⎾⎿⏀⏁⏂⏃⏄⏅⏆⏇⏈⏉⏊⏋⏌⏍⏎⏏⏐⏑⏒⏓⏔⏕⏖⏗⏘⏙⏚⏛⏜⏝⏞⏟⏠⏡⏢⏣⏤⏥⏦⏧⏨⏩⏪⏫⏬⏭⏮⏯⏰⏱⏲⏳