アクターモデル
アクターモデル（英: actor model）とは、1973年、カール・ヒューイット、Peter Bishop、Richard Steiger が発表した並行計算の数学的モデルの一種。アクターモデルでは、並行デジタル計算の汎用的基本要素として「アクター」という概念を導入している。アクターモデルは並行性の理論的理解のフレームワークとして使われるほか、並行システムの実装の理論的基礎としても利用されてきた。
歴史
アクターモデルはそれ以前の計算モデルとは異なり、物理法則を発想の基本としている。他にも、LISP言語、Simula言語、ケーパビリティ・システム、パケット通信、初期のSmalltalkなどの影響を受けている。アクターモデルは「数百・数千のマイクロプロセッサから構成され、個々にローカルメモリを持ち、高性能通信ネットワークで通信を行う並列コンピュータが近い将来登場するとの予測」から開発された。その後、Webサービスやメニイコアアーキテクチャを活用した超並行性にも範囲を広げてきた。
ヒューイットの1973年の論文に続いて、Irene Greif はアクターモデルの操作的意味論を開発した。2年後、Henry Baker とヒューイットはアクターシステムの公理的法則群を発表した。1981年、William Clinger は Power Domains に基づいたアクターモデルの表示的意味論を発表。1985年、Gul Agha は Clinger の意味論に基づいた遷移ベースの意味論モデルを構築した。これらにより、アクターモデル理論が完成した。
アクターモデルをソフトウェアとして実装する作業は MIT の Message Passing Semantics Group で行われた。また、カリフォルニア工科大学の Chuck Seitz と MIT の Bill Dally に率いられたチームはアクターモデルに基づくメッセージパッシングを使用したコンピュータアーキテクチャを構築した。
日本では、東京大学や京都大学での研究があり、特に東京大学の米澤明憲らの研究が有名である。
メッセージパッシング意味論
アクターモデルはメッセージパッシングの意味論でもある。
無制限の非決定性に関する議論
最初の並行プログラムは割り込みハンドラであった。コンピュータは通常処理の最中に外部（キーボード、ネットワークなど）からの情報を受け取る必要が生じた。そこで、情報が到着すると、コンピュータは割り込まれ、割り込みハンドラと呼ばれる特別なコードが呼び出されて情報をバッファに取り込み、逐次的に処理できるようにする。
これが「通信する逐次プロセス; Communicating Sequential Processes」というパラダイムの始まりであり、この並行プログラムは、バッファを使って同期的に通信した逐次プログラムを並列に並べたものであった。共有メモリを伴う並列性は並行性制御という問題を生じた。元々は、これは1つのコンピュータ上の排他制御の一種であると考えられていた。相互排他問題を解決するため、最初にエドガー・ダイクストラがセマフォを開発し、アントニー・ホーア[1974]と Per Brinch Hansen がモニタを開発した。しかし、これらの解決策は共有リソースへのアクセスをカプセル化するプログラミング言語構文には採用されなかった。カプセル化は後にシリアライザという構文で実現された（[Hewitt and Atkinson 1979]、[Atkinson 1980]）。
初期の計算モデル（チューリングマシン、ラムダ計算など）は数学に基づいており、状態によって計算「ステップ」を表現した。各計算ステップは、ある状態から別の状態への遷移である。このような状態遷移的手法は、非決定性のものを含む有限状態機械などのオートマタ理論へと発展していった。非決定性オートマトンには有限の非決定性があり、マシンが初期状態から動作開始したとき常に停止するなら、停止するときの状態数は有限である。
エドガー・ダイクストラは、この非決定的な状態遷移手法の研究を進めた。ダイクストラのモデルをきっかけとして無制限の非決定性に関する議論が発生した。無制限の非決定性は、並行性の特徴であり、共有リソースの衝突の仲裁の結果として、サービスの遅延が無制限に発生することを意味する（タイムアウトなど、サービスを打ち切る仕様でない場合）。ヒューイットはアクターモデルにはサービスの保証を提供するとした。ダイクストラのモデルでは、逐次命令列の実行に無制限の時間が掛かる可能性があるとしても、状態定義が適切であれば有限の状態数で停止するとされた[Dijkstra 1976]。結果として、ダイクストラのモデルはサービスの保証を提供できなかった。ダイクストラは無制限の非決定性を実装することは不可能であると主張した。
ヒューイットは調停回路と呼ばれる計算回路が安定するのにかかる時間に制限はないと主張した。調停回路はコンピュータが外部からの入力（キーボードからの入力、ディスクアクセス、ネットワークからの受信など）をクロックとは非同期的に処理する状況で使われる。そのため、あるメッセージがコンピュータによって受け取られるまでにかかる時間には際限がなく、その間にコンピュータが遷移する状態数にも制限がない。
アクターモデルでは、Will Clinger が領域理論を使った数学的モデルで無制限の非決定性を導入している。アクターモデルには、グローバルな状態という概念はない。
直接通信と非同期性
アクターモデルではメッセージをバッファに蓄える必要はない。この点はかつての並行計算のモデルとは明確に異なっている。バッファがないという点は当初から誤解されがちで、議論となる問題である。メッセージは「エーテル」や「環境」によってバッファリングされると主張する研究者もいた。しかし、「エーテル」は非常に良いバッファとは言えない。エーテルに置かれたメッセージは、受け取られるまでそこに留まるわけではない。また、アクターモデルでのメッセージは（IPのパケットのように）単に送られる。受信側と同期的なハンドシェイクをする必要はない。
アドレスを伴うアクター生成は可変なトポロジーを可能にする
アクターモデルの自然な発展として、メッセージ内のアドレスが含まれるようになった。パケット通信[1961 and 1964]に影響され、ヒューイットは形式が固定されていない通信を使った新たな並行計算のモデルを提案した。例えば、メッセージは空でもよい。もちろん、送信側が受信側に新たなアクセスすべきアドレスを伝えたい場合、通信によってそれが伝えられる。
計算によっては、メッセージを受け取った側からの応答を得たい場合がある。そのためには、resumption（再開）と呼ばれる別のアクターのアドレス付きでメッセージを送る（継続またはスタックフレームとも呼ばれる）。受信者は応答メッセージを resumpiton に送信する。
メッセージにアクターのアドレスを含めることによって、アクター間の関係は可変なトポロジーを形成することができる。それはちょうど Simula のオブジェクトが可変トポロジーの関係を持つのと似ている。
本来的な並行性
逐次的プロセスの合成に基づく従来の手法とは異なり、アクターモデルは本来的に並行的なモデルとして開発された。アクターモデルでの逐次性はアクターモデル理論で説明されるように並行計算の特殊ケースである。
メッセージ受信の順番は不同
アクターモデルで送信された順番にメッセージが受信されるべきだという要求にたいしてヒューイットは反論した。出力の順序付けが必要なら、その機能を持つキューの役割をするアクターを導入すればよい。キュー・アクターは到着したメッセージをFIFO順にキューイングする。そのため、アクター X がアクター Y にメッセージ M1 を送り、X がその後に受け取ったメッセージに対応して新たにメッセージ M2 を Y に送った場合、M1 は M2 より先に Y に到着するとは限らない。
この点でアクターモデルはパケット通信システムを反映している。パケット通信ではパケットが送信順に受信されることを保証していない。受信順を保証しないことで、パケット通信はパケットをバッファリングしたり、様々な経路でパケットを送信したり、パケットを再送したりといった最適化を可能としている。
例えば、アクターはメッセージ処理をパイプライン化できる。つまり、メッセージ M1 を処理するにあたって、アクターは次のメッセージの処理に影響を与えることができ、結果として M1 の処理が完了する前に次のメッセージ M2 の処理を開始できる。これはパイプライン化することもできるというだけであって、必ずそうしなければならないということではない。メッセージをパイプライン化するかどうかはエンジニアリング上のトレードオフの問題である。外部から見てアクターがメッセージ処理をパイプライン化しているかどうか分かるだろうか？ パイプライン化可能なアクターの定義には曖昧さは全くない。もちろん、パイプライン化を不要なところで行う可能性は存在し、その場合の動作は予期しないものとなる。
非逐次性、非同期性、非固定トポロジー
ロビン・ミルナー[1973]の論文は逐次型プロセスの合成でない並行性を扱っているという点で特筆すべきものである。アクターモデルとの違いは、固定個のプロセスを固定されたトポロジーで配置し、同期式のバッファ付き通信を使用している点である。アントニー・ホーア[1978]の Communicating Sequential Process モデルは、固定個の逐次型プロセスで構成された固定のトポロジーを持ち、同期式のバッファ付き通信を使用する。
ミルナーやホーアの初期のモデルは、有限の非決定性を持つ。その後、Communicating Sequential Process (CSP) は、無制限の非決定性を扱うよう拡張された（[Hoare 1985]、[Roscoe 2005]）。
局所性
アクターモデルの重要な特徴の1つとして、局所性がある。
局所性とは、メッセージを処理するときにアクターがメッセージを送信できる相手はアドレスを知っているものに限られるということを意味する。
また、複数の位置を同時に変更することがないことも局所性と称する。この点は他の並行性モデルとは異なる。例えばペトリネットモデルではトークンは同時に複数の場所から削除され、別の複数の場所に配置される。
合成性
合成性（Compositionality）とは、アクターシステム群から大きなシステムを構成できることを意味する。これはモジュール性という観点で重要であり、Gul Agha の学位論文や Gul Agha、Ian Mason、Scott Smith、Carolyn Talcottで展開された。
振る舞い
「振る舞い; behavior」の導入により、アクターのメッセージ処理を数学的関数として記述できるようになった。振る舞いは並行性における共有を数学的にモデル化する機構を提供する。
振る舞いによってアクターモデルは（例えば Smalltalk-72 のトークン・ストリーム・インタプリタのような）実装の詳細から解放された。しかし、アクターモデルで記述されたシステムを効率的に実装する際、大規模な最適化が必須となることは重要である。
数理論理学との関係
アクターモデルの開発と数理論理学との関係は興味深い。その開発の主要な動機として、Planner言語の開発で生じた制御構造問題を扱い、理解するという目的があった。アクターモデルが定義されたとき、「計算は推論に内包される」という Kowalski の主張に関連するモデルの能力を理解するという重要な目標があったのである。Kowalski の主張は、アクターモデルによる並行計算では偽であることが判明した（計算の不確定性参照）。Kowalski の主張は逐次計算やラムダ計算などの一部の並列計算では真であることから、この結論には未だに議論がある。
それにも関わらず、論理プログラミングを並行計算に拡張しようという試みがなされた。しかし、ヒューイットと Agha[1991]は、結果として生まれたシステムにおける計算ステップがその前のステップからの推論（演繹）ではないという意味で、演繹的ではないと指摘した。
マイグレーション
マイグレーション（Migration）とは、アクターが位置を変更可能であることを意味する。例えば、米澤明憲は学位論文で郵便局をアクターモデルでモデル化した。客をアクターとし、郵便局内で位置を変えながら何らかの処理をして出て行くというものである。マイグレートするアクターは位置アクターを導入することでモデル化できる。位置アクターはアクターのマイグレーションに応じて変化する。しかし、このモデル化は議論を呼び、現在も研究対象となっている。