Introduction - raywenderlich.com...Act II: Grand Central Dispatch Fire & Forget with GCD Dispatch...

Post on 16-Oct-2020

2 views 0 download

Transcript of Introduction - raywenderlich.com...Act II: Grand Central Dispatch Fire & Forget with GCD Dispatch...

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?

📼⌀⌁⌂⌃⌄⌅⌆⌇⌈⌉⌊⌋⌌⌍⌎⌏⌐⌑⌒⌓⌔⌕⌖⌗⌘⌙⌚⌛⌜⌝⌞⌟⌠⌡⌢⌣⌤⌥⌦⌧⌨⟨⟩⌫⌬⌭⌮⌯⌰⌱⌲⌳⌴⌵⌶⌷⌸⌹⌺⌻⌼⌽⌾⌿⍀⍁⍂⍃⍄⍅⍆⍇⍈⍉⍊⍋⍌⍍⍎⍏⍐⍑⍒⍓⍔⍕⍖⍗⍘⍙⍚⍛⍜⍝⍞⍟⍠⍡⍢⍣⍤⍥⍦⍧⍨⍩⍪⍫⍬⍭⍮⍯⍰⍱⍲⍳⍴⍵⍶⍷⍸⍹⍺⍻⍼⍽⍾⍿⎀⎁⎂⎃⎄⎅⎆⎇⎈⎉⎊⎋⎌⎍⎎⎏⎐⎑⎒⎓⎔⎕⎖⎗⎘⎙⎚⎛⎜⎝⎞⎟⎠⎡⎢⎣⎤⎥⎦⎧⎨⎩⎪⎫⎬⎭⎮⎯⎰⎱⎲⎳⎴⎵⎶⎷⎸⎹⎺⎻⎼⎽⎾⎿⏀⏁⏂⏃⏄⏅⏆⏇⏈⏉⏊⏋⏌⏍⏎⏏⏐⏑⏒⏓⏔⏕⏖⏗⏘⏙⏚⏛⏜⏝⏞⏟⏠⏡⏢⏣⏤⏥⏦⏧⏨⏩⏪⏫⏬⏭⏮⏯⏰⏱⏲⏳