アクターモデル
並行計算のモデル。アクターを計算の基本単位とし、各アクターはメッセージ受信に応じて「①有限個の新アクター生成、②他アクターへメッセージ送信、③次に受け取るメッセージへの振る舞い変更」だけを行う。共有メモリを持たず、非同期メッセージパッシングのみで通信。Carl Hewitt (1973) 提唱。
中核の性質
- プライベート状態 + 直列処理 — 各アクターは自分の状態を持ち、メッセージを1度に1つずつ処理する。だからロック不要で競合が起きない
- メールボックス — 受信メッセージはキューに積まれる。送信は fire-and-forget(非同期)
- 位置透過性 — 宛先はアドレスで指定。ローカルでもリモートでも同じコード → 分散へ自然に拡張できる
- 監視(supervision) — 親(スーパーバイザ)が子の異常を検知し再起動。Erlang/OTP の “let it crash” 哲学で耐障害性を作る
型付きアクター
素のアクターはどんなメッセージも受け取れて型安全でない。型付きアクターは「この振る舞いが受け取れるメッセージ型」を型で固定する(Akka Typed の Behavior[T] など)。プロトコル違反をコンパイル時に弾け、分散シミュレーション等で堅牢になる。
CSP(チャネル)との違い
| アクターモデル | CSP(Go の channel 等) | |
|---|---|---|
| 通信路 | 宛先アドレスへ送る | 無名のチャネルを共有 |
| 同期性 | 非同期(メールボックス) | 基本ランデブー(同期) |
| 結合 | 送り手が受け手を知る | 送受がチャネルだけを知る |
実装
Erlang / Elixir(BEAM の軽量プロセス)、Akka(Scala/JVM)、Microsoft Orleans(virtual actors)、Pony。
関連
- 分散システムの一貫性 — 位置透過なアクターは分散システムの構成単位になる
- Work-Stealing — 多数の軽量アクター/タスクを実コアへ割り当てるスケジューリング
- Coeffect — 「必要なケイパビリティ」をメッセージ型で縛る発想と隣接