TL;DR

アクターを基本単位とする、並行計算の数学的なモデル。アクターは自分だけの状態を持ち、ほかのアクターとはメッセージを送ることでしか影響し合わない。1973 年に Carl Hewitt、Peter Bishop、Richard Steiger が発表した。

なぜ必要か

アクターは自分の状態だけを書き換え、ほかのアクターにはメッセージで間接的にしか影響しない。状態を共有しないので、ロックによる同期がいらない。Hewitt は独立した多数のマイクロプロセッサからなる高度に並列なマシンを動機にしていた。

仕組み

アクターはメッセージを受け取ると、次のことを行える。

  • 有限個のメッセージをほかのアクターに送る
  • 有限個の新しいアクターを作る
  • 次のメッセージを受け取ったときの振る舞いを決める

これらの動作に決まった順序はなく、並列に行ってもよい。メッセージの宛先はアドレスで指定する。アクターがメッセージを送れるのは、もともと知っているアドレス、メッセージで受け取ったアドレス、自分が作ったアクターのアドレスだけである。メッセージは非同期に直接送られ、届く順番には制約がない。

例

アクターモデルに基づく言語には Erlang、Elixir、Scala などがあり、Java と Scala 向けのツールキットには Akka がある。.NET と Go 向けの Proto.Actor、PHP 向けの Phluxor もある。XState の Actor も、実行中のステートマシンをアクターとして扱う。

関連

出典