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

protect_mutable_state_in_concurrent_Swift_applications.pdf

 protect_mutable_state_in_concurrent_Swift_applications.pdf

ohayoukenchan

June 25, 2021
Tweet

More Decks by ohayoukenchan

Other Decks in Programming

Transcript

  1. protect mutable state
    in concurrent
    Swift applications
    sento_kun (ohayoukenchan)
    ママリiOSエンジニア募集中だよ

    View Slide

  2. この話の流れ
    - data races
    - actors in Swift(Actorってなぁに)
    - actor reentrancy(再入性)
    - actor isolation(Actorの分離)
    - main actor(メインスレッドでの非同期処理)

    View Slide

  3. いきなりですが
    Data Races
    とは?

    View Slide

  4. View Slide

  5. 共有された
    可変型の状態が必要
    とされる場合がある

    View Slide

  6. 共有された可変型の状態
    をうまく同期させたい

    View Slide

  7. actors in Swift

    View Slide

  8. Actors
    - Actorsは独自の状態を持ち、その状態は他のプログラムから隔離されて
    います。
    - Actorsにアクセスするには、Actorsを経由するしかありません。
    - Actorsを経由するときはいつでも、Actorsの同期メカニズムによって、他の
    コードが同時にActorsの状態にアクセスしないことが保証されます。
    - ロックやシリアルディスパッチキューを手動で使用したときに得られるのと
    同じ相互排除特性が得られます

    View Slide

  9. Data Races
    データ競合(data race)は、マルチスレッド
    ・プログラム実装上の問題

    View Slide

  10. One will get there first,
    and
    the other will have to
    wait its turn.

    View Slide

  11. actors in Swift

    View Slide

  12. Actor reentrancy

    View Slide

  13. actors in Swift

    View Slide

  14. View Slide

  15. Actor Isolation

    View Slide

  16. protocol conformances

    View Slide

  17. Await

    View Slide

  18. Await

    View Slide

  19. View Slide

  20. View Slide

  21. Closures

    View Slide

  22. View Slide

  23. View Slide

  24. actor isolation and data

    View Slide

  25. View Slide

  26. View Slide

  27. Sendable

    View Slide

  28. View Slide

  29. View Slide

  30. View Slide

  31. Main Actor

    View Slide

  32. thinking about
    main thread

    View Slide

  33. View Slide

  34. View Slide

  35. まとめもりー
    - mutableな状態への同時アクセスを防ぐことでデータ競合を防ぐ
    - value semantic(letとかstruct)みたいなimmutableなデータと
    Actors(mutable な状態への同時アクセスできる)を使って非同期処理
    を設計しよう
    - Actorの分離(内側にあるか外側にあるか)を考慮する
    - メインスレッドで非同期処理をすることを保証するため
    DispatchQueue.mainのかわりにMainActorを使う

    View Slide

  36. おわり

    View Slide

  37. Data Races
    データ競合(data race)は、マルチスレッド
    ・プログラム実装上の問題

    View Slide