コンピュータ サイエンスにおいて、アクター モデルの実装は、アクター モデルの実装に関する問題に関係します。
コズミックキューブ
Caltech Cosmic Cube は、Caltech の Chuck Seitzらによって開発され、Actor システムのアーキテクチャ サポートを提供します。Cosmic Cube と他のほとんどの並列プロセッサとの大きな違いは、この複数命令複数データ マシンが、同時プロセス間の通信に共有変数ではなくメッセージ パッシングを使用していることです。この計算モデルはハードウェア構造とオペレーティング システムに反映されており、プログラマーが認識する明示的なメッセージ パッシング通信でもあります。Seitz [1985] によると:
- Cosmic Cube 実験の前提は、ノード間の通信が膨大な数のノードにうまく対応できるはずである、というものでした。ハイパーキューブのような直接ネットワークは、多数の同時通信チャネルで達成される総帯域幅と実装の実現可能性の両方に関して、この要件を満たしています。ハイパーキューブは、実際には、共有ストレージ組織で使用される可能性のあるオメガ ネットワークやバンヤンネットワークのような間接対数スイッチング ネットワークの分散型です。ただし、ハイパーキューブでは、通信パスが通過するチャネルの数が異なるため、レイテンシが異なります。したがって、プロセスをノードに配置する際に通信の局所性を利用することができます。
J-マシン
J -Machine は、MIT のBill Dally らによって開発され、 Actor に適したアーキテクチャ サポートを提供します。これには次のものが含まれます。
- 非同期メッセージング
- 受信側アクターがローカルか非ローカルかに関係なく、同時にメッセージを送信できるアクターアドレスの均一な空間
- アクターパイプラインの形式(アクターモデルを参照)
Concurrent Smalltalk ( Actorsを使用してモデル化可能) は、J Machine をプログラムするために開発されました。
プロトタイプアクタープログラミング言語
Hewitt [2006]は、アクターの行動の重要な側面を直接表現するという意味において、プロトタイプのアクタープログラミング言語を提示した。メッセージは、次の記法を使用してXMLで表現される。 :<tag>[<element>1 ... <element>] for
- “<”<tag>“>” <element>1 ... <element>n “<”/<tag>“>”
プログラミング言語のセマンティクスは、各プログラム構成要素を独自の動作を持つアクターとして定義することによって定義されます。実行は、実行中にプログラム構成要素間で Eval メッセージを渡すことによってモデル化されます。
環境アクター
各Evalメッセージには、プログラム識別子のバインディングを持つ環境として機能するアクターのアドレスがあります。環境アクターは不変です。つまり、変化しません。Request[Bind[identifier value] customer]がアクター環境によって受信されると、新しい環境アクターが作成され、新しい環境アクターが を受信すると、 Request[Lookup[identifier’] customer’]がidentifierと同じであればidentifier’を送信しcustomer’ Returned[value]、そうでない場合は を送信します。上記は、を受信するとを送信するEnvironment Request[Lookup[identifier’] customer’]アクターに基づいています。リクエストを受信すると、上記のように動作します。 EmptyEnvironmentRequest[Lookup[identifier] customer]customer Thrown[NotFound[identifier]]BindEmptyEnvironmentEnvironment
表現
プロトタイプ プログラミング言語には、次の種類の式があります。
- <識別子>
- Request[Eval[environment] customer]受信したら送信environment Request[Lookup[<identifier>] customer]
- 送信<受信者> <通信>
- を受け取ったらRequest[Eval[environment] customer]、 新しいアクターを送信します。<recipient> Request[Eval[environment] evalCustomer1]evalCustomer1
- 通信を受信したら送信するevalCustomer1Returned[theRecipient]<communication>
- Request[Eval[environment] evalCustomer2]新たなアクターはどこにいるのかevalCustomer2
- 通信を受信したら、 を送信します。evalCustomer2Returned[theCommunication]theRecipient theCommunication
- <受信者>.<メッセージ>
- 受信したらRequest[Eval[environment] customer]、次のように送信します<recipient> Request[Eval[environment] evalCustomer1]
- 通信を受信したら、次のように送信します。evalCustomer1Returned[theRecipient]<message> Request[Eval[environment] evalCustomer2]
- 通信を受信したら送信するevalCustomer2Returned[theMessage]theRecipient
- Request[theMessage customer]
- 受信者... <パターン> i <式> i ...
- を受け取ったらRequest[Eval[environment] customer]、customer新しいアクターをtheReceiver送信して
- theReceiver通信を受信するとcom、新しいbindingCustomer環境を作成して送信します
- Request[Bind[<pattern>i com] bindingCustomer]そして
- bindingCustomer受信したらReturned[environment’]送信<expression>i
- Request[Eval[environment’]]
- bindingCustomerそれ以外の場合はThrown[...]、<pattern>i+1
- 動作... <パターン> i <式> i ...
- 受信したらRequest[Eval[environment] customer]、顧客に新しいアクターを送信しますtheReceiver。
- theReceiverを受け取ったらRequest[message customer’]、新しいものを作成しbindingCustomerて送信しますenvironment
- Request[bind[<pattern>i message] customer’]そして
- bindingCustomer受信したらReturned[environment’]送信<expression>i
- Request[Eval[environment’] customer’]
- bindingCustomerそれ以外の場合はThrown[...]、<pattern>i+1
- bindingCustomer受信したらReturned[environment’]送信<expression>i
- {<式> 1、 <式> 2 }
- を受信したらRequest[Eval[environment] customer]、 を送信し、同時に を送信します。<expression>1 Request[Eval[environment]]<expression>2 Request[Eval[environment]] customer]
- <識別子> = <式>値 、 <式>本体とする
- 受信したらmessage[Eval[environment] customer]、新しいものを作成しevalCustomerて送信します<expression>value
- Request[Eval[environment] evalCustomer1。
- evalCustomerを受け取ったらReturned[theValue]、新しいものを作成しbindingCustomerて送信しますenvironment
- Request[bind[<identifier> theValue] bindingCustomer]
- bindingCustomer受信したらReturned[environment’]送信<expression>body Request[Eval[environment’] customer]
- シリアライザー<式>
- が受信されるとRequest[Eval[environment] customer]、送信先は新しいアクターであり、送信された通信はcustomer Returned[theSerializer]FIFO順で処理され、最初は動作アクターであり、theSerializertheSerializer<expression>.Eval[environment]
- 通信comが によって受信されるとtheSerializer、動作 Actor を送信します。Request[com customer’]ここで、 はcustomer’新しいアクターであり、
- customer’が受信するとReturned[theNextBehavior]、theNextBehaviorが受信する次の通信の動作アクターとして が使用されますtheSerializer。
サンプルプログラム
任意の Actor アドレスを格納できる単純なストレージ セルのプログラム例は次のとおりです。
- セル ≡
- 受信機
- リクエスト[[初期]顧客の作成]
- 顧客への送信Returned[ serializer ReadWrite(initial)]
- リクエスト[[初期]顧客の作成]
- 受信機
ストレージ セルを作成する上記のプログラムは、次のように定義される ReadWrite 動作を利用します。
- 読み取り書き込み(コンテンツ) ≡
- 行動
- リクエスト[読み取り[]顧客]
- {顧客に Returned[contents]を送信し、ReadWrite(contents) を実行します}
- リクエスト[write[x] customer]
- {顧客に Returned[], ReadWrite(x)を送信します}
- リクエスト[読み取り[]顧客]
- 行動
上記の動作はパイプライン化されています。つまり、動作は、後続の読み取りまたは書き込みメッセージを処理している間も、前の読み取りまたは書き込みメッセージを処理している可能性があります。たとえば、次の式は、初期コンテンツ 5 を持つセル x を作成し、次に値 7 と 9 を同時に書き込みます。
- x = Cell.Create[5]を{x.write[7], x.write[9], x.read[]}で記述する
上記の式の値は 5、7、または 9 です。
参照
参考文献
- Henry Bakerと Carl Hewittプロセスの増分ガベージ コレクション、人工知能プログラミング言語に関するシンポジウムの議事録。SIGPLAN 通知 12、1977 年 8 月。
- Peter Bishop超大規模アドレス空間モジュール拡張可能コンピュータ システムMIT EECS 博士論文。1977 年 6 月。
- ヘンリー・ベイカー。リアルタイム計算のためのアクターシステム、 MIT EECS 博士論文。1978 年 1 月。
- Carl Hewitt と Russ Atkinson。 シリアライザの仕様と証明手法、 IEEE Journal on Software Engineering、1979 年 1 月。
- ケン・カーン。アニメーションの計算理論、 MIT EECS 博士論文。1979 年 8 月。
- Carl Hewitt、Beppe Attardi、Henry Lieberman。 メッセージ パッシングの代表団、第 1 回国際分散システム会議議事録、アラバマ州ハンツビル。1979 年 10 月。
- ビル・コーンフェルドとカール・ヒューイット。 科学コミュニティのメタファー、 IEEE Transactions on Systems, Man, and Cybernetics。1981 年 1 月。
- ヘンリー・リーバーマン。混乱せずに一度にたくさんのことを考える: 第 1 幕の並列性、 MIT AI メモ 626。1981 年 5 月。
- ヘンリー・リーバーマン。第 1 幕のプレビュー、 MIT AI メモ 625。1981 年 6 月。
- ビル・コーンフェルド。 問題解決における並列性、 MIT EECS 博士論文。1981 年 8 月。
- Daniel Theriault。Act -1 言語入門 MIT AI メモ 672。1982 年 4 月。
- Henry Lieberman と Carl Hewitt。 オブジェクトの寿命に基づいたリアルタイム ガベージ コレクター、CACM、1983 年 6 月。
- ダニエル・テリオー。Act 2 の設計と実装における問題、 MIT AI 技術レポート 728。1983 年 6 月。
- ヘンリー・リーバーマン。 アメリカ人工知能協会養蜂場会議のためのオブジェクト指向シミュレータ、ワシントン DC、1983 年 8 月。
- Carl Hewitt と Henry Lieberman。 人工知能のための並列アーキテクチャの設計上の問題MIT AI メモ 750。1983 年 11 月。
- チャールズ・ザイツ。コズミック・キューブCACM。1985 年 1 月。
- Carl Manning。Traveler : the Actor observatory ECOOP 1987。Lecture Notes in Computer Science、vol. 276 にも掲載されています。
- Carl Manning、 Acore: コア アクター言語とそのコンパイルの設計修士論文。MIT EECS。1987 年 5 月。
- William Athas と Charles Seitzマルチコンピュータ: メッセージ パッシング同時実行コンピュータIEEE Computer 1988 年 8 月。
- William Athas と Nanette Boden Cantor: 科学計算のためのアクター プログラミング システム、 NSF ワークショップの議事録、オブジェクト ベースの並行プログラミング。1988 年、SIGPLAN 通知の特別号。
- ジャン=ピエール・ブリオ。 オブジェクトからアクターへ:Smalltalk における限定的な共生の研究 - 80 Rapport de Recherche 88-58、RXF-LITP、パリ、フランス、1988 年 9 月
- William Dally および Wills, D.並行処理のための汎用メカニズムPARLE '89。
- W. Horwat、A. Chien、W. Dally。CSTの経験: PLDI のプログラミングと実装。1989 年。
- 米沢明徳編『ABCL: オブジェクト指向並行システム』 MIT Press、1990年。
- Carl Hewitt と Gul Agha。 「ガードホーン節言語: 演繹的かつ論理的か?」 MIT の人工知能、第 2 巻。MIT 出版、1991 年。
- Carl Hewitt および Jeff Inman。DAI Betwixt and Between: 「インテリジェント エージェント」からオープン システム サイエンスへ、 IEEE Transactions on Systems, Man, and Cybernetics、1991 年 11 月/12 月。
- William Dally他 「メッセージ駆動型プロセッサ: 効率的なメカニズムを備えたマルチコンピュータ処理ノード」 IEEE Micro。1992 年 4 月。
- Don Box、David Ehnebuske、Gopal Kakivaya、Andrew Layman、Noah Mendelsohn、Henrik Nielsen、Satish Thatte、Dave Winer。Simple Object Access Protocol (SOAP) 1.1 W3C ノート。2000 年 5 月。
- Edward A. Lee および Stephen Neuendorfer (2004 年 6 月)。「アクター指向設計におけるクラスとサブクラス」(博士論文 - 拡張概要)。Codesign の形式手法およびモデルに関する会議 (MEMOCODE)。
- Carl Hewitt。 論理プログラミングの度重なる衰退とそれが復活する理由 何が間違っていたのか、そしてその理由: AI 研究とアプリケーションからの教訓。技術レポート SS-06-08。AAAI プレス。2006 年 3 月。
