Upgrade to Pro — share decks privately, control downloads, hide ads and more …

360|iDev Concurrency Workshop

sammyd
August 21, 2016

360|iDev Concurrency Workshop

Slides accompanying the 360|iDev concurrency workshop from 2016

sammyd

August 21, 2016
Tweet

More Decks by sammyd

Other Decks in Programming

Transcript

  1. Concurrency
    workshop
    Sam Davies
    @iwantmyrealname
    _
    github.com/sammyd

    git.io/v6waD

    View Slide

  2. concurrency
    is hard

    View Slide

  3. what is
    concurrency?

    View Slide

  4. why use
    concurrency?

    View Slide

  5. common
    concurrency
    problems

    View Slide

  6. race condition

    View Slide

  7. Race Condition
    time
    Value 1
    Thread 1
    Thread 2
    inc

    View Slide

  8. Race Condition
    time
    Value 1 1
    Thread 1
    Thread 2
    inc r1

    View Slide

  9. Race Condition
    time
    Value 1 1 1
    Thread 1
    Thread 2
    inc r1 +1

    View Slide

  10. Race Condition
    time
    Value 1 1 1 2
    Thread 1
    Thread 2
    inc r1 w2
    +1

    View Slide

  11. Race Condition
    time
    Value 1 1 1 2 2
    Thread 1
    Thread 2
    inc r1 w2
    +1
    inc

    View Slide

  12. Race Condition
    time
    Value 1 1 1 2 2 2
    Thread 1
    Thread 2
    inc r1 w2
    +1
    inc r2

    View Slide

  13. Race Condition
    time
    Value 1 1 1 2 2 2 2
    Thread 1
    Thread 2
    inc r1 w2
    +1
    inc r2 +1

    View Slide

  14. Race Condition
    time
    Value 1 1 1 2 2 2 2 3
    Thread 1
    Thread 2
    inc r1 w2
    +1
    inc r2 w3
    +1

    View Slide

  15. Race Condition
    time
    Value 1
    Thread 1
    Thread 2
    inc

    View Slide

  16. Race Condition
    time
    Value 1 1
    Thread 1
    Thread 2
    inc r1
    inc

    View Slide

  17. Race Condition
    time
    Value 1 1 1
    Thread 1
    Thread 2
    inc r1
    inc r1

    View Slide

  18. Race Condition
    time
    Value 1 1 1 1
    Thread 1
    Thread 2
    inc r1
    inc r1 +1

    View Slide

  19. Race Condition
    time
    Value 1 1 1 2
    1
    Thread 1
    Thread 2
    inc r1
    inc r1 w2
    +1

    View Slide

  20. Race Condition
    time
    Value 1 1 1 2
    1 2
    Thread 1
    Thread 2
    inc r1 +1
    inc r1 w2
    +1

    View Slide

  21. Race Condition
    time
    Value 1 1 1 2
    1 2 2
    Thread 1
    Thread 2
    inc r1 w2
    +1
    inc r1 w2
    +1

    View Slide

  22. priority
    inversion

    View Slide

  23. Priority Inversion
    time
    low
    priority
    resource

    View Slide

  24. Priority Inversion
    time
    low
    priority
    resource

    View Slide

  25. Priority Inversion
    time
    low
    medium
    priority
    resource

    View Slide

  26. Priority Inversion
    time
    low
    medium
    high
    priority
    resource

    View Slide

  27. Priority Inversion
    time
    low
    medium
    high
    priority
    resource

    View Slide

  28. Priority Inversion
    time
    low
    medium
    high
    priority
    resource

    View Slide

  29. Priority Inversion
    time
    low
    medium
    high
    priority
    resource

    View Slide


  30. deadlock

    View Slide

  31. Deadlock
    time
    resource1
    resource2
    Thread 1
    Thread 2

    View Slide

  32. Deadlock
    time
    resource1
    resource2
    Thread 1
    Thread 2

    View Slide

  33. Deadlock
    time
    resource1
    resource2
    Thread 1
    Thread 2

    View Slide

  34. Deadlock
    time
    resource1
    resource2
    Thread 1
    Thread 2


    View Slide

  35. Deadlock
    time
    resource1
    resource2
    Thread 1
    Thread 2


    View Slide

  36. Deadlock
    time
    resource1
    resource2
    Thread 1
    Thread 2


    View Slide

  37. Deadlock
    time
    resource1
    resource2
    Thread 1
    Thread 2


    View Slide

  38. Deadlock
    time
    resource1
    resource2
    Thread 1
    Thread 2


    View Slide

  39. $&'(
    queueueueueue paradigm

    View Slide

  40. Tasks & Queues
    Thread 1
    Thread 2
    Queue

    View Slide

  41. Tasks & Queues
    Thread 1
    Thread 2
    Queue

    View Slide

  42. Tasks & Queues
    Thread 1
    Thread 2
    Queue

    View Slide

  43. Tasks & Queues
    Thread 1
    Thread 2
    Queue

    View Slide

  44. Tasks & Queues
    Thread 1
    Thread 2
    Queue

    View Slide

  45. Tasks & Queues
    Thread 1
    Thread 2
    Queue

    View Slide

  46. Tasks & Queues
    Thread 1
    Thread 2
    Queue

    View Slide

  47. feeling
    brave?

    View Slide

  48. a touch more
    theory

    View Slide

  49. Thread Safety
    time
    Value 1111
    Thread 1
    Thread 2
    Thread 3

    View Slide

  50. Thread Safety
    time
    Value 1111
    Thread 1
    Thread 2
    r1111
    Thread 3

    View Slide

  51. Thread Safety
    time
    Value 1111 1112
    Thread 1
    Thread 2
    r1111
    w2222
    Thread 3

    View Slide

  52. Thread Safety
    time
    Value 1111 1112 1122
    Thread 1
    Thread 2
    r1111
    w2222
    r1122
    Thread 3

    View Slide

  53. Thread Safety
    time
    Value 1111 1112 1122 1223
    Thread 1
    Thread 2
    r1111
    w2222
    r1122 w3333
    Thread 3 r1223

    View Slide

  54. Thread Safety
    time
    Value 1111 1112 1122 1223 2233
    Thread 1
    Thread 2
    r1111
    w2222
    r1122 w3333
    Thread 3 r1223

    View Slide

  55. Thread Safety
    time
    Value 1111 1112 1122 1223 2233 2333
    Thread 1
    Thread 2
    r1111
    w2222
    r1122
    r2333
    w3333
    Thread 3 r1223

    View Slide

  56. Thread Safety
    time
    Value 1111 1112 1122 1223 2233 2333 3333
    Thread 1
    Thread 2
    r1111
    w2222
    r1122
    r2333
    w3333
    Thread 3 r1223

    View Slide

  57. Thread Safety
    time
    Value 1111 1112 1122 1223 2233 2333 3333 3333 3333
    Thread 1
    Thread 2
    r1111
    w2222
    r1122
    r2333
    w3333
    Thread 3 r1223 r3333
    r3333

    View Slide

  58. Dispatch Barrier
    time
    task
    task
    task
    task
    task
    barrier task task
    task
    task
    task task
    task
    task

    View Slide

  59. Dispatch Barrier
    time
    read
    read
    read
    read
    read
    read
    write read
    read
    read
    read read
    read

    View Slide

  60. alternatives
    to 

    View Slide

  61. promises
    networkRequest(url, callback: { data in
    decompressor(data, callback: { image in
    imageResizer(image, callback: { small in
    filterImage(small, callback: { filtered in
    displayImage(filtered)
    })
    })
    })
    })

    View Slide

  62. promises
    promise
    int error

    View Slide

  63. promises
    str

    View Slide

  64. promises
    promise
    str
    f

    View Slide

  65. promises
    promise
    str
    error
    f
    img

    View Slide

  66. promises
    promise
    str
    error
    f
    img
    error handler

    View Slide

  67. promises
    promise
    str
    error
    f
    img
    g
    promise
    error handler

    View Slide

  68. promises
    promise
    str
    error
    f
    img
    g
    promise
    error
    error handler
    img

    View Slide

  69. promises
    promise
    str
    error
    f
    img
    g
    promise
    error
    error handler
    img

    View Slide

  70. promises
    networkRequest(url)
    .then(decompressor)
    .then(imageResizer)
    .then({ (image) in
    return filterImage(image)
    }).then(displayImage)
    .catch({ (error) in print(error) })

    View Slide

  71. imagine the
    “promise pipeline”
    accepted a
    sequence of values…

    View Slide

  72. that’s reactive
    programming

    View Slide

  73. conclusion

    View Slide

  74. concurrency
    is hard

    View Slide

  75. you will get
    it wrong

    View Slide

  76. • raywenderlich.com/videos
    • git.io/v6waD
    • @iwantmyrealname

    View Slide