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

Goにおけるアクターモデルの実現に 向けたライブラリの設計と実装

sanposhiho
June 23, 2022
2.3k

Goにおけるアクターモデルの実現に 向けたライブラリの設計と実装

sanposhiho

June 23, 2022
Tweet

More Decks by sanposhiho

Transcript

  1. 10 Erlang アクターモデルを採用 • アクター = ErlangVM上の一つのプロセス • プロセス同士は完全に分離 (メモリ空間など)

    → あるプロセスがクラッシュしても他のプロセスに影響しにくい • ホットスワップ: プログラム全体の再起動をせずにプロセスを入れ替える 10
  2. 12 Erlang 12 spawn: プロセスの開始 
 pong(): 再帰的に実行 
 !

    : 他のプロセスへのメッセージの送信 
 (→は公式ドキュ メントより引用)
  3. 37 この go func (){ ... }で囲われた部分が 軽量スレッド内の処理 
 ロック。軽量スレッド終了時にロックの解除。

    
 内部の処理を実行
 結果をFutureに送信 
 ↓Futureを作成。
 Futureを返却
 37
  4. 40 既存のGoのアクターモデルライブラリとの比較 protoactor-go、ergoなどが存在 - Swiftのアクターようなデザインのものは存在しないので、デザインが他と大きく異 なる。 - オブジェクト指向に慣れている開発者がそのままの感覚で使用できる。 - interfaceやモックなど、既存のオブジェクト指向プログラミングを前提とした

    Goのエコシステムを全 てそのまま使用できる。 - Futureへの処理結果の送信の箇所を、ジェネリクスで実現しているため、メッセー ジングが型安全である。 - 他のライブラリはメッセージングに型がつかない。例えば、誤った型のメッセージを送信した場合 に、開発者は気がつくことができない。 40