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

Ab1b72230a5b6ddc97322af27ad91618?s=128

ohayoukenchan

June 25, 2021
Tweet

Transcript

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

  2. この話の流れ - data races - actors in Swift(Actorってなぁに) - actor

    reentrancy(再入性) - actor isolation(Actorの分離) - main actor(メインスレッドでの非同期処理)
  3. いきなりですが Data Races とは?

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

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

  7. actors in Swift

  8. Actors - Actorsは独自の状態を持ち、その状態は他のプログラムから隔離されて います。 - Actorsにアクセスするには、Actorsを経由するしかありません。 - Actorsを経由するときはいつでも、Actorsの同期メカニズムによって、他の コードが同時にActorsの状態にアクセスしないことが保証されます。 -

    ロックやシリアルディスパッチキューを手動で使用したときに得られるのと 同じ相互排除特性が得られます
  9. Data Races データ競合(data race)は、マルチスレッド ・プログラム実装上の問題

  10. One will get there first, and the other will have

    to wait its turn.
  11. actors in Swift

  12. Actor reentrancy

  13. actors in Swift

  14. None
  15. Actor Isolation

  16. protocol conformances

  17. Await

  18. Await

  19. None
  20. None
  21. Closures

  22. None
  23. None
  24. actor isolation and data

  25. None
  26. None
  27. Sendable

  28. None
  29. None
  30. None
  31. Main Actor

  32. thinking about main thread

  33. None
  34. None
  35. まとめもりー - mutableな状態への同時アクセスを防ぐことでデータ競合を防ぐ - value semantic(letとかstruct)みたいなimmutableなデータと Actors(mutable な状態への同時アクセスできる)を使って非同期処理 を設計しよう -

    Actorの分離(内側にあるか外側にあるか)を考慮する - メインスレッドで非同期処理をすることを保証するため DispatchQueue.mainのかわりにMainActorを使う
  36. おわり

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