https://speakerdeck.com/sanposhiho/goniokeruakutamoderufalseshi-xian-ni-xiang-ketaraiburarifalseshe-ji-toshi-zhuang
→ あるプロセスがクラッシュしても他のプロセスに影響しにくい • ホットスワップ: プログラム全体の再起動をせずにプロセスを入れ替える 10
20
• google/wire: 依存性注入(DI)のためのフレームワーク 21
22
発生する。 30
数の処理を実行しない。) 3. 処理結果をFutureに送信する。 32
内部の処理を実行 結果をFutureに送信 ↓Futureを作成。 Futureを返却 37
### [38 アクターリエントランシー Swiftを参考にリエントランシーと呼ばれる仕組みを導入。 アクターの処理の中で、Futureで他のアクターの処理の終了を待っている間(= future.Getで待ちが発生している間)は、そのアクターは他の処理を行うことができる。 → これにより、デッドロックを防いでいる。 38](<https://files.speakerdeck.com/presentations/d0e6b4c82986476f9c81524fceacff05/slide_37.jpg>)
ジを処理できない。 すると、アクターBの処理は永遠に終わらないのでデッドロック 39
Goのエコシステムを全 てそのまま使用できる。 - Futureへの処理結果の送信の箇所を、ジェネリクスで実現しているため、メッセー ジングが型安全である。 - 他のライブラリはメッセージングに型がつかない。例えば、誤った型のメッセージを送信した場合 に、開発者は気がつくことができない。 40
### [40 既存のGoのアクターモデルライブラリとの比較 protoactor-go、ergoなどが存在 - Swiftのアクターようなデザインのものは存在しないので、デザインが他と大きく異 なる。 - オブジェクト指向に慣れている開発者がそのままの感覚で使用できる。 - interfaceやモックなど、既存のオブジェクト指向プログラミングを前提とした](<https://files.speakerdeck.com/presentations/d0e6b4c82986476f9c81524fceacff05/slide_39.jpg>)
### [43 Non-reentrant アクター リエントランシーが有効でないアクターを生成できるオプションの作成。 Non-reentrantなアクターは前述のデッドロックを起こす可能性があるが、 それを動的に発見する機能を同時に提供することが、技術的に実装可能である。 (静的に発見することは難しい。) 43](<https://files.speakerdeck.com/presentations/d0e6b4c82986476f9c81524fceacff05/slide_42.jpg>)
### [47 宣言的な管理による、他のホストでのアクターの起動 他のホストのアクターを同時に管理できると、分散システムが構築しやすい。 宣言的に管理しておくことで、「host Bでactor Aを起動する」というふうに登録すること により、host Bで起動しているアクターを管理するコンポーネント(前述) がactorAを起 動してくれる。](<https://files.speakerdeck.com/presentations/d0e6b4c82986476f9c81524fceacff05/slide_46.jpg>)