protect mutable statein concurrentSwift applicationssento_kun (ohayoukenchan)ママリiOSエンジニア募集中だよ
View Slide
この話の流れ- data races- actors in Swift(Actorってなぁに)- actor reentrancy(再入性)- actor isolation(Actorの分離)- main actor(メインスレッドでの非同期処理)
いきなりですがData Racesとは?
共有された可変型の状態が必要とされる場合がある
共有された可変型の状態をうまく同期させたい
actors in Swift
Actors- Actorsは独自の状態を持ち、その状態は他のプログラムから隔離されています。- Actorsにアクセスするには、Actorsを経由するしかありません。- Actorsを経由するときはいつでも、Actorsの同期メカニズムによって、他のコードが同時にActorsの状態にアクセスしないことが保証されます。- ロックやシリアルディスパッチキューを手動で使用したときに得られるのと同じ相互排除特性が得られます
Data Racesデータ競合(data race)は、マルチスレッド・プログラム実装上の問題
One will get there first,andthe other will have towait its turn.
Actor reentrancy
Actor Isolation
protocol conformances
Await
Closures
actor isolation and data
Sendable
Main Actor
thinking aboutmain thread
まとめもりー- mutableな状態への同時アクセスを防ぐことでデータ競合を防ぐ- value semantic(letとかstruct)みたいなimmutableなデータとActors(mutable な状態への同時アクセスできる)を使って非同期処理を設計しよう- Actorの分離(内側にあるか外側にあるか)を考慮する- メインスレッドで非同期処理をすることを保証するためDispatchQueue.mainのかわりにMainActorを使う
おわり