Slide 1

Slide 1 text

Concurrency
 From the
 Ground Up @gregheo 360iDev 2018 {

Slide 2

Slide 2 text

@gregheo 360iDev 2018 Concurrency

Slide 3

Slide 3 text

@gregheo 360iDev 2018 1. Programs that seem faster to the user 2. Programs that are easy to understand for the programmer WHY? WHY?

Slide 4

Slide 4 text

@gregheo 360iDev 2018 1. Structuring our programs better 2. Thinking in terms of Tasks 3. Protecting Resources

Slide 5

Slide 5 text

@gregheo 360iDev 2018 mainQueue.async { } troublesomeCode()

Slide 6

Slide 6 text

@gregheo 360iDev 2018 mainQueue.asyncAfter(.now + 0.1) { } troublesomeCode()

Slide 7

Slide 7 text

@gregheo 360iDev 2018 Concurrency
 &
 Structure

Slide 8

Slide 8 text

@gregheo 360iDev 2018 Concurrency
 Parallelism

Slide 9

Slide 9 text

@gregheo 360iDev 2018 “concurrency is the composition of independently executing processes”

Slide 10

Slide 10 text

@gregheo 360iDev 2018 “parallelism is the simultaneous execution of (possibly related) computations”

Slide 11

Slide 11 text

@gregheo 360iDev 2018 “parallelism is the simultaneous execution of computations”

Slide 12

Slide 12 text

@gregheo 360iDev 2018 “
 
 Parallelism is about doing lots of things at once.” Concurrency is about dealing with lots of things at once.

Slide 13

Slide 13 text

@gregheo 360iDev 2018

Slide 14

Slide 14 text

@gregheo 360iDev 2018

Slide 15

Slide 15 text

@gregheo 360iDev 2018

Slide 16

Slide 16 text

@gregheo 360iDev 2018 C B A A()
 B()
 C()

Slide 17

Slide 17 text

@gregheo 360iDev 2018 A B C

Slide 18

Slide 18 text

@gregheo 360iDev 2018 A B C

Slide 19

Slide 19 text

@gregheo 360iDev 2018 A B C data

Slide 20

Slide 20 text

@gregheo 360iDev 2018 Order? Shared state? Mutable state?

Slide 21

Slide 21 text

@gregheo 360iDev 2018 Tasks
 &
 Threads

Slide 22

Slide 22 text

@gregheo 360iDev 2018 thread function thread thread

Slide 23

Slide 23 text

@gregheo 360iDev 2018 pthread GCD queue NSOperation dispatch groups

Slide 24

Slide 24 text

@gregheo 360iDev 2018 Locks
 &
 Resources

Slide 25

Slide 25 text

@gregheo 360iDev 2018 Lock • Locks as signals • Locks as mutual exclusion

Slide 26

Slide 26 text

@gregheo 360iDev 2018 pthread mutex semaphore os_unfair_lock NSLock GCD
 semaphore dispatch
 groups

Slide 27

Slide 27 text

@gregheo 360iDev 2018 1. Structuring our programs better 2. Thinking in terms of Tasks 3. Protecting Resources

Slide 28

Slide 28 text

@gregheo 360iDev 2018 1. Programs that seem faster to the user 2. Programs that are easy to understand for the programmer

Slide 29

Slide 29 text

@gregheo 360iDev 2018 pthread GCD
 queue Groups pthread
 mutex unfair lock NSLock GCD
 semaphore pthread
 semaphore NSThread }