Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

actors in Swift

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

actors in Swift

Slide 12

Slide 12 text

Actor reentrancy

Slide 13

Slide 13 text

actors in Swift

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

Actor Isolation

Slide 16

Slide 16 text

protocol conformances

Slide 17

Slide 17 text

Await

Slide 18

Slide 18 text

Await

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

Closures

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

actor isolation and data

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

Sendable

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

Main Actor

Slide 32

Slide 32 text

thinking about main thread

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

おわり

Slide 37

Slide 37 text

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