アクターモデル
[Wikipedia|▼Menu]

アクターモデル(: actor model)とは、1973年カール・ヒューイット、Peter Bishop、Richard Steiger が発表した並行計算の数学的モデルの一種[1]。アクターモデルでは、並行デジタル計算の汎用的基本要素として「アクター」という概念を導入している。アクターモデルは並行性の理論的理解のフレームワークとして使われるほか、並行システムの実装の理論的基礎としても利用されてきた。
歴史

アクターモデルはそれ以前の計算モデルとは異なり、物理法則を発想の基本としている。他にも、LISP言語、Simula言語、ケーパビリティ・システムパケット通信、初期のSmalltalkなどの影響を受けている。アクターモデルは「数百・数千のマイクロプロセッサから構成され、個々にローカルメモリを持ち、高性能通信ネットワークで通信を行う並列コンピュータが近い将来登場するとの予測」から開発された[2]。その後、Webサービスメニイコアアーキテクチャを活用した超並行性にも範囲を広げてきた。

ヒューイットの1973年の論文に続いて、Irene Greif はアクターモデルの操作的意味論を開発した[3]。2年後、Henry Baker とヒューイットはアクターシステムの公理的法則群を発表した[4]。1981年、William Clinger は Power Domains に基づいたアクターモデルの表示的意味論を発表[2]。1985年、Gul Agha は Clinger の意味論に基づいた遷移ベースの意味論モデルを構築した[5]。これらにより、アクターモデル理論(英語版)が完成した。

アクターモデルをソフトウェアとして実装する作業は MIT の Message Passing Semantics Group で行われた。また、カリフォルニア工科大学の Chuck Seitz と MIT の Bill Dally に率いられたチームはアクターモデルに基づくメッセージパッシングを使用したコンピュータアーキテクチャを構築した。

日本では、米澤明憲らの研究が有名である。
基本概念

アクターモデルの基本は「全てのものはアクターである」という哲学である。これはオブジェクト指向プログラミングにおける「全てのものはオブジェクトである」という考え方と似ているが、オブジェクト指向ソフトウェアでは基本的に逐次的に実行するのに対して、アクターモデルでは本質的に並行性を備えている点が異なる。

アクターは並行的に受信するメッセージに対応した以下のような振る舞いを備えた計算実体(Computational Entity)である:

(他の)アクターに有限個のメッセージを送信する。

有限個の新たなアクターを生成する。

次に受信するメッセージに対する動作を指定する。

これらの振る舞いには逐次性は前提とされておらず、並列的にこれらを実行する。

他のアクターとの通信は非同期に発生する(すなわち、送信側アクターはメッセージが受信されるのを待たずに次の計算に移行する)。

メッセージを送信する相手のアクターはアドレスによって指定される(これをアクターの「メールアドレス」とも呼ぶ)。結果として、アクターはアドレスのあるアクターとのみ通信可能であり、他のアクターのアドレスは以下のような方法で獲得される:
受信したメッセージ内にアドレスが書いてある。

そのアクターが何らかの方法で既に相手のアドレスを知っている。

そのアクターは生成したアクターである。

アクターモデルは、アクター自体およびアクター間の計算の本質的並行性を特徴とし、メッセージ内にアクターのアドレスを含め、相互のやりとりは到着順が保証されない直接的非同期メッセージパッシングのみである。
形式体系

長年にわたり、アクターモデルを理解するための形式体系が開発されてきた。以下のようなものがある:

アクターシステムの法則
[4]

遷移意味論[5]

アクターモデルのメッセージパッシング機能を完全には形式化していない点でアクターモデルそのものには対応していない形式体系として、以下のようなものがある:

いくつかのアクター代数系[6][7][8]

応用

アクターモデルは、各種並行システムのモデリングや理解のフレームワークとして利用可能である。以下のような例がある:

TTCN(Testing and Test Control Notation)はアクターモデルにある程度基づいている。TTCN では、アクターとはテスト部品であり、パラレルテスト部品(PTC) と主要テスト部品(MTC)がある。テスト部品は(他のテスト部品やテストシステムと)メッセージを送受信し、通信相手をアドレスで識別する。各テスト部品は固有の動作ツリーを持ち、並行的に動作し、他のテスト部品を動的に生成する。組み込み言語機能により受信したメッセージの種類に対応した動作を記述できる。

アクターモデル以前

アクターモデルは、それ以前の以下のような計算モデルの上に構築された。
ラムダ計算
計算可能性を論じるときに使われる計算モデル
Simula
最初のオブジェクト指向言語。ただし、真の並行性はなく、コルーチンを使用している。
Smalltalk
アラン・ケイはヒューイットのPlannerに影響を受けてSmalltalk-71を考案したが、それとは別にSimulaLispLogoの要素と自分のメッセージパッシングのアイデアを組み合わせたSmalltalk-72をダン・インガルスらとともに開発していた。ヒューイットはAltoで動くSmalltalk-72のデモを見てそのアイデアに興味を引かれたが、メッセージパッシング方式の複雑さは気に入らなかった。メッセージパッシングに基づいた並行計算の数学的モデルはSmalltalk-72よりも単純化すべきであるとの考えが生まれた。なお、Smalltalk-72やそれ以降の-76、-80には、Simulaになかった特徴として、整数などの基本的データ型もメッセージの受け手とした点が挙げられる。
ペトリネット
アクターモデル以前に広く使われていた並行計算用モデル。しかし、ペトリネットは制御フローはモデル化できるが、データフローをモデル化できないという弱点があった。また、ヒューイットが指摘した問題として、動作の同時性がある。ペトリネットでの不可分な計算ステップはトークンが入力箇所から消え、「同時に」出力箇所に出現することになっている。ヒューイットはこのような特徴を前提としたモデルでは実際の並行システムにそぐわないと考えた。
メッセージパッシング意味論

アクターモデルはメッセージパッシングの意味論でもある。
無制限の非決定性に関する議論

最初の並行プログラムは割り込みハンドラであった。コンピュータは通常処理の最中に外部(キーボード、ネットワークなど)からの情報を受け取る必要が生じた。そこで、情報が到着すると、コンピュータは割り込まれ、割り込みハンドラと呼ばれる特別なコードが呼び出されて情報をバッファに取り込み、逐次的に処理できるようにする。

この並行プログラムは、バッファを使って同期的に通信した逐次プログラムを並列に並べたものであった。共有メモリを伴う並列性は並行性制御という問題を生じた。元々は、これは1つのコンピュータ上の排他制御の一種であると考えられていた。相互排他問題を解決するため、最初にエドガー・ダイクストラセマフォを開発し、アントニー・ホーア[1974]と Per Brinch Hansen がモニタを開発した。([Hewitt and Atkinson 1979]、[Atkinson 1980])。

初期の計算モデル(チューリングマシンラムダ計算など)は数学に基づいており、状態によって計算「ステップ」を表現した。各計算ステップは、ある状態から別の状態への遷移である。このような状態遷移的手法は、非決定性のものを含む有限状態機械などのオートマタ理論へと発展していった。非決定性オートマトンには有限の非決定性があり、マシンが初期状態から動作開始したとき常に停止するなら、停止するときの状態数は有限である。

エドガー・ダイクストラは、この非決定的な状態遷移手法の研究を進めた。ダイクストラのモデルでは、逐次命令列の実行に無制限の時間が掛かる可能性があるとしても、状態定義が適切であれば有限の状態数で停止するとされた[Dijkstra 1976]。ヒューイットはこのダイクストラのモデルで提供できなかったサービスの保証をアクターモデルでは提供するとした。

ヒューイットの言う無制限の非決定性(英語版)[9]は、並行性の特徴であり、共有リソースの衝突の仲裁の結果として、サービスの遅延が無制限に発生することを意味する(タイムアウトなど、サービスを打ち切る仕様でない場合)。ヒューイットは調停回路(英語版)と呼ばれる計算回路が安定するのにかかる時間に制限はないと主張した。調停回路はコンピュータが外部からの入力(キーボードからの入力、ディスクアクセス、ネットワークからの受信など)をクロックとは非同期的に処理する状況で使われる。そのため、あるメッセージがコンピュータによって受け取られるまでにかかる時間には際限がなく、その間にコンピュータが遷移する状態数にも制限がない。

アクターモデルでは、Will Clinger が領域理論を使った数学的モデルで無制限の非決定性を導入している[2]


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:38 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef