アクターモデル

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

俳優のモデルコンピュータサイエンスは、ある数学モデル同時計算扱い、その俳優の同時計算のユニバーサルプリミティブとして。アクターは、受信したメッセージ応答して、ローカルでの決定、より多くのアクターの作成、より多くのメッセージの送信、および次に受信したメッセージへの応答方法の決定を行うことができます。アクターは自分のプライベート状態を変更できますが、メッセージングを介して間接的にのみ相互に影響を与えることができます(ロックベースの同期の必要性を排除します)。

アクターモデルは、1973年に起源[1]それはのためのフレームワークの両方として使用されている理論的な理解計算およびいくつかの理論的根拠としての実用的な実装同時システムモデルと他の作業との関係は、アクターモデルとプロセス計算で説明されています

歴史

カール・ヒューイットよれば、以前の計算モデルとは異なり、アクターモデルは一般相対性理論量子力学などの物理学に触発されました[要出典]プログラミング言語LispSimulaSmalltalkの初期バージョン機能ベースのシステムパケット交換の影響も受けました。。その開発は、「高性能通信ネットワークを介して通信する、それぞれが独自のローカルメモリと通信プロセッサを備えた数十、数百、さらには数千の独立したマイクロプロセッサで構成される高度な並列コンピューティングマシンの見通しによって動機付けられました」。[2]それ以来、マルチコアおよびメニーコアのコンピュータアーキテクチャによる大規模な同時実行の出現により、アクターモデルへの関心が復活しました。

ヒューイット、ビショップ、シュタイガーの1973年の出版に続いて、アイリーングライフは、博士課程の研究の一環として、アクターモデルの操作的意味論開発しました[3] 2年後、ヘンリー・ベイカーとヒューイットは、俳優システムに関する一連の公理法則を発表しました。[4] [5]その他の主要なマイルストーンにはパワードメインに基づく表示的意味論紹介するWilliam Clingerの1981年の論文[2]、Clingerの補完的な遷移ベースの意味論モデルをさらに開発したGulAghaの1985年の論文が含まれます。[6]これにより、アクターモデル理論

主要なソフトウェア実装作業は、メッセージパッシングセマンティクスグループのRuss Atkinson、Giuseppe Attardi、Henry Baker、Gerry Barber、Peter Bishop、Peter de Jong、Ken Kahn、Henry Lieberman、Carl Manning、Tom Reinhardt、Richard Steiger、DanTheriaultによって行われました。マサチューセッツ工科大学(MIT)。カリフォルニア工科大学(Caltech)のChuckSeitzとMITのBillDallyが率いる研究グループは、モデルで渡されるメッセージをさらに発展させるコンピュータアーキテクチャを構築しました。アクターモデルの実装を参照してください

アクターモデルの研究は、カリフォルニア工科大学京都大学所所研究所、マイクロエレクトロニクスおよびコンピューターテクノロジーコーポレーション(MCC)、MIT人工知能研究所SRIスタンフォード大学イリノイ大学アーバナシャンペーン校で実施されました[7]。 ピエールとマリー・キュリー大学(パリ第6大学)、ピサの大学東京大学の米澤研究所、セントラムWiskunde&インフォマティカ(CWI)および他の場所。

基本的な概念

アクターモデルは、すべてがアクターであるという哲学を採用していますこれは、すべてがオブジェクト指向プログラミング言語で使用されるオブジェクト哲学であることに似ています

アクターは、受信したメッセージに応答して、同時に次のことができる計算エンティティです。

  • 有限数のメッセージを他のアクターに送信します。
  • 有限数の新しいアクターを作成します。
  • 次に受信するメッセージに使用される動作を指定します。

上記のアクションに想定されるシーケンスはなく、並行して実行できます。

送信された通信から送信者を分離することは、メッセージ渡すパターンとして非同期通信と制御構造を可能にするアクターモデルの根本的な進歩でした[8]

メッセージの受信者は、「メールアドレス」と呼ばれることもあるアドレスによって識別されます。したがって、アクターは、アドレスを持つアクターとのみ通信できます。受信したメッセージから、またはアドレスが自分で作成したアクター用である場合は、それらを取得できます。

アクターモデルは、アクター内およびアクター間の計算の固有の同時実行性、アクターの動的な作成、メッセージへのアクターアドレスの包含、およびメッセージの到着順序に制限のない直接非同期メッセージパッシングのみによる対話によって特徴付けられます

正式なシステム

何年にもわたって、アクターモデルのシステムについての推論を可能にするいくつかの異なる正式なシステムが開発されてきました。これらには以下が含まれます:

次のようなメッセージの保証された配信を形式化しないという点で、アクターモデルに完全に忠実ではない形式もあります(アクターのセマンティクスを代数および線形論理に関連付ける試みを参照)。

アプリケーション

アクターモデルは、さまざまな並行システムに関するモデリング、理解、および推論のためのフレームワークとして使用できます[15]例:

  • 電子メール(email)は、アクターシステムとしてモデル化できます。アカウントはアクターとしてモデル化され、電子メールアドレスはアクターアドレスとしてモデル化されます。
  • Webサービス、アクターアドレスとしてモデル化されたSimple Object Access Protocol(SOAP)エンドポイントを使用してモデル化できます。
  • オブジェクトのロック例えばのように、ジャワおよびC#の)としてモデル化することができるシリアライザその実装は、メッセージが継続的に(おそらく内部に格納して到着することができるようなものであることを条件とする、キュー)。シリアライザーは、新しいメッセージの到着時に継続的に使用できるというプロパティによって定義される重要な種類のアクターです。シリアライザーに送信されるすべてのメッセージは、確実に到着します。[16]
  • TTCN-2とTTCN-3の両方のテストおよびテスト制御表記(TTCN)は、アクターモデルにかなり厳密に従います。 TTCNでは、アクターはテストコンポーネントです。並列テストコンポーネント(PTC)またはメインテストコンポーネント(MTC)のいずれかです。テストコンポーネントは、リモートパートナー(ピアテストコンポーネントまたはテストシステムインターフェイス)との間でメッセージを送受信できます。後者は、アドレスによって識別されます。各テストコンポーネントには、動作ツリーがバインドされています。テストコンポーネントは並行して実行され、親テストコンポーネントによって動的に作成できます。組み込みの言語構造により、メッセージを別のピアエンティティに送信したり、新しいテストコンポーネントを作成したりするなど、内部メッセージキューから予期されたメッセージを受信したときに実行するアクションを定義できます。

メッセージパッシングセマンティクス

アクターモデルは、メッセージパッシングのセマンティクスに関するものです

無制限の非決定性論争

間違いなく、最初の並行プログラムは割り込みハンドラーでした。通常の操作の過程で、コンピューターは外部から情報(キーボードからの文字、ネットワークからのパケットなどを受信できる必要がありましたそのため、情報が到着すると、コンピューターの実行が中断され、特別なコード(割り込みハンドラーと呼ばれる)が呼び出されて、情報をデータバッファーに入れ、後で取得できるようになりました。

1960年代初頭、1つのプロセッサで複数のプログラムの同時実行をシミュレートするために割り込みが使用されるようになりました。[17]共有メモリとの同時実行性があると同時実行性制御の問題が発生しました。当初、この問題は、単一のコンピューターでの相互排除の1つであると考えられていました。Edsger Dijkstraセマフォ開発し、その後、1971年から1973年の間に[18] Tony Hoare [19]PerBrinch Hansen [20]モニターを開発しました。相互排除の問題を解決します。ただし、これらのソリューションはいずれも、共有リソースへのアクセスをカプセル化するプログラミング言語構造を提供していませんでした。このカプセル化は、後にシリアライザー構造によって実現さました([Hewitt and Atkinson 1977,1979]および[Atkinson1980])。

計算の最初のモデル(例えばチューリング機械、ポストプロダクション、ラムダ計算など)数学に基づいて計算表現するグローバル状態の使用なされたステップ後[マッカーシーとヘイズ1969]に一般化(および[ダイクストラを1976]イベントの順序とグローバル状態を参照してください)。各計算ステップは、計算の1つのグローバル状態から次のグローバル状態まででした。グローバル状態アプローチが継続されたオートマトン理論のための有限状態マシンと押し下げスタックマシンを自分を含め、非決定的バージョン。このような非決定性オートマトンには、有界非決定性の特性があります。つまり、マシンが初期状態で起動したときに常に停止する場合、停止する状態の数には制限があります。

Edsger Dijkstraは、非決定論的なグローバル国家アプローチをさらに発展させました。ダイクストラのモデルはに関する論争を引き起こした無制限の非決定性を(とも呼ばれる無限の不確定性の性質、)同時実行要求をサービスにおける遅延量は、共有リソースの競合の調停の結果として、無制限になることができたことにより、まだ要求することを保証しながら最終的にサービスされます。ヒューイットは、アクターモデルがサービスの保証を提供するべきであると主張しました。ダイクストラのモデルでは、コンピューター上で順次命令を実行するまでに無制限の時間がかかる可能性がありますが、明確に定義された状態で開始された(並列)プログラムは、制限された数の状態でのみ終了する可能性があります[ダイクストラ1976]。その結果、彼のモデルはサービスの保証を提供できませんでした。ダイクストラは、無制限の非決定性を実装することは不可能であると主張した。

ヒューイットは別の言い方をしました。アービターと呼ばれる計算回路が安定するのにかかる時間に制限はありません準安定状態(電子機器)を参照)。[21]アービタは、コンピュータのクロックが外部からの入力に対して、非同期で動作することを状況に対処するためにコンピュータで使用され、例えば、キーボード入力、ディスクアクセス、ネットワーク入力、それが送信されたメッセージのための無制限の時間を取ることができるように受信するコンピューターであり、その間にコンピューターは無制限の数の状態を通過する可能性があります。

アクターモデルは、領域理論を使用してウィルクリンガーによって数学モデルでキャプチャされた無制限の非決定性を特徴としています[2]アクターモデルには、グローバルな状態はありません。[疑わしい ]

直接通信と非同期

アクターモデルのメッセージは、必ずしもバッファリングされるとは限りません。これは、並行計算のモデルに対する以前のアプローチとは大きく異なるものでした。バッファリングの欠如は、アクターモデルの開発時に多くの誤解を引き起こし、依然として物議を醸している問題です。一部の研究者は、メッセージは「エーテル」または「環境」にバッファリングされていると主張しました。また、俳優のモデル内のメッセージは、単に(のように送られたパケットでのIP)。受信者との同期ハンドシェイクの要件はありません。

アクターの作成とメッセージ内のアドレスは、可変トポロジを意味します

アクターモデルの自然な発展は、メッセージ内のアドレスを許可することでした。パケット交換ネットワーク[1961および1964]の影響を受けて、ヒューイットは、通信に必要なフィールドがまったくない、つまり空である可能性がある並行計算の新しいモデルの開発を提案しました。もちろん、通信の送信者が受信者に、受信者がまだ持っていないアドレスへのアクセスを許可したい場合は、そのアドレスを通信で送信する必要があります。

たとえば、アクターは、後で応答を受信することを期待する受信者アクターにメッセージを送信する必要がある場合がありますが、応答は実際には、応答を受信して​​処理するように構成された3番目のアクターコンポーネントによって処理されます(たとえば、 、オブザーバーパターンを実装する別のアクター)。元のアクターは、送信したいメッセージと、応答を処理する3番目のアクターのアドレスを含む通信を送信することでこれを実現できます。応答を処理するこの3番目のアクターは、再開と呼ばれます継続またはスタックフレームとも呼ばれます)。受信者アクターが応答を送信する準備ができると、応答メッセージをに送信します。元の通信に含まれていた再開アクターアドレス。

したがって、通信を交換できる新しいアクターを作成するアクターの機能と、メッセージに他のアクターのアドレスを含める機能により、アクターは、互いに任意に変化するトポロジ関係を作成して参加することができます。 Simulaやその他のオブジェクト指向言語のオブジェクトは、メッセージ交換オブジェクトの可変トポロジに関係的に構成される場合もあります。

本質的に並行

シーケンシャルプロセスの構成に基づく以前のアプローチとは対照的に、アクターモデルは本質的に並行モデルとして開発されました。アクターモデルでは、アクターモデル理論で説明されているように、シーケンシャルは並行計算から派生した特殊なケースでした

メッセージの到着順序は不要

ヒューイットは、メッセージがアクターに送信される順序でメッセージが到着する必要があるという要件を追加することに反対しました。出力メッセージの順序が必要な場合は、この機能を提供するキューアクターによってモデル化できます。このようなキューアクターは、到着したメッセージをキューに入れて、FIFO順に取得できるようにします。したがって、アクターがアクターXにメッセージM1送信し、Y後でX別のメッセージM2Y送信した場合、前にM1到着する要件はありませんYM2

この点で、アクターモデルは、送信された順序でパケットを受信する必要があることを保証しないパケット交換システムを反映しています。配信順序の保証を提供しないと、パケット交換によるパケットのバッファリング、複数のパスを使用したパケットの送信、破損したパケットの再送信、およびその他の最適化が可能になります。

たとえば、アクターはメッセージの処理をパイプライン化できます。つまり、メッセージの処理中M1に、アクターは次のメッセージの処理に使用する動作を指定し、実際には、処理M2が完了する前に別のメッセージの処理を開始できますM1アクターがメッセージの処理をパイプライン化できるからといって、それが必要であるとは限りません。処理をパイプラインします。メッセージがパイプライン化されるかどうかは、エンジニアリング上のトレードオフです。外部のオブザーバーは、アクターによるメッセージの処理がパイプライン化されているかどうかをどのように知るのでしょうか?パイプライン化の可能性によって作成されたアクターの定義にあいまいさはありません。もちろん、一部の実装ではパイプラインの最適化を誤って実行する可能性があります。その場合、予期しない動作が発生する可能性があります。

地域

アクターモデルのもう1つの重要な特徴は、局所性です。

局所性とは、メッセージの処理において、アクターがメッセージを送信できるのは、メッセージで受信したアドレス、メッセージを受信する前にすでに持っていたアドレス、およびメッセージの処理中に作成したアクターのアドレスのみであることを意味します。(ただし、アクターのアドレスの合成を参照してください。)

また、局所性とは、複数の場所で同時に変化がないことを意味します。このように、他の並行性モデルとは異なります。たとえばトークンが複数の場所から同時に削除され、他の場所に配置されるペトリネットモデルなどです。

アクターシステムの構成

より大きなものに俳優・システムを構成するというアイデアは、の重要な側面である、モジュール、グール・アガの博士論文で開発された[6]はグール・アガ、イアン・メイソン、スコット・スミス、そしてによって後に開発キャロリンタルコット[9]

行動

重要な革新は、到着する次のメッセージを処理するための新しい動作の指定を含む、メッセージを処理するときにアクターが行うことを表す数学関数として指定された動作の導入でした動作は、並行性の共有を数学的にモデル化するメカニズムを提供しました。

行動はまた、実装の詳細から俳優のモデルを解放例えば、Smalltalkの-72トークンストリームインタプリタを。ただし、アクターモデルによって記述されるシステムの効率的な実装には、広範な最適化が必要であることを理解することが重要です詳細については、アクターモデルの実装を参照してください。

他の並行性システムのモデリング

他の並行処理システム(例えばプロセス結石)を使用してアクターモデルでモデル化することができる2相コミット[22]

計算表現定理

外部からの通信を受信しないという意味で閉じられているシステムのアクターモデルには、計算表現定理があります。閉鎖系によって示される数学的意味初期動作と動作近似関数から構成されますこれらはますます優れた近似を取得し、の外延(意味)を構築しますSprogressionS次のように[Hewitt2008; クリンガー1981]:

このようにして、Sすべての可能な動作(無制限の非決定性を含む動作を含む)の観点から数学的に特徴付けることができます。それでも の実装ではありません 、それはチャーチチューリングロッサークリーネ論文の一般化を証明するために使用することができます[クリーネ1943]:

定理上記の結果は、有限の俳優が有する非決定的応答することができるということである無数[明らかにする異なる出力数。

論理プログラミングとの関係

アクターモデルの開発の主な動機の1つは、Plannerプログラミング言語の開発で発生した制御構造の問題を理解して対処することでした[要出典]アクターモデルが最初に定義された後、重要な課題は、「計算は演繹によって包含される」というロバートコワルスキーの論文に対するモデルの力を理解することでした。ヒューイットは、アクターモデルの並行計算についてコワルスキーの論文が誤りであることが判明したと主張しました(並行計算の不確定性を参照)。

それにもかかわらず、論理プログラミングを並行計算に拡張する試みがなされましたただし、Hewitt and Agha [1991]は、結果のシステムは次の意味で演繹的ではないと主張しました。並行論理プログラミングシステムの計算ステップは、前のステップから演繹的に従わない(並行計算の不確定性を参照)。最近、論理プログラミングは、論理セマンティクスを維持する方法でアクターモデルに統合されました。[21]

移行

アクターモデルでの移行は、アクターが場所を変更する機能です。たとえば、彼の論文では、アキ・ヨネザワは、顧客の俳優が出入りできる郵便局をモデル化しました。移行できるアクターは、アクターが移行するときに変更されるロケーションアクターを持つことでモデル化できます。ただし、このモデリングの忠実性については議論の余地があり、研究の対象となっています。[要出典]

セキュリティ

アクターのセキュリティは、次の方法で保護できます。

アクターのアドレスの合成

アクターモデルの微妙な点は、アクターのアドレスを合成する機能です。場合によっては、セキュリティを使用してアドレスの合成を防ぐことができます(セキュリティを参照)。ただし、アクターアドレスが単純なビット文字列である場合、ビット文字列が十分に長い場合、アクターのアドレスを推測することは困難または実行不可能である場合でも、明らかに合成できます。SOAPは、アクターに到達できるエンドポイントのアドレスにURL使用しますURLは文字列であるため、暗号化によって推測が事実上不可能になる可能性がありますが、明確に合成できます。

アクターのアドレスの合成は、通常、マッピングを使用してモデル化されます。アイデアは、アクターシステムを使用して、実際のアクターアドレスへのマッピングを実行することです。たとえば、コンピュータでは、コンピュータのメモリ構造を、マッピングを行うアクターシステムとしてモデル化できます。SOAPアドレスの場合DNSと残りのURLマッピングをモデル化してます

メッセージパッシングの同時実行性の他のモデルと対比

並行性に関するRobinMilnerの最初の公開された作業[23]は、順次プロセスの構成に基づいていないという点でも注目に値します。彼の作品は、同期通信を使用して数値と文字列を通信する固定トポロジの固定数のプロセスに基づいていたため、アクターモデルとは異なりました。Tony Hoareによって公開された元の通信シーケンシャルプロセス(CSP)モデル[24]は、固定トポロジで接続された固定数のシーケンシャルプロセスの並列構成に基づいており、同期メッセージパッシングベースを使用して通信するため、アクターモデルとは異なります。プロセス名について(アクターモデルとプロセス計算履歴を参照))。CSPの新しいバージョンでは、チャネルを介した匿名通信を優先してプロセス名に基づく通信を放棄しました。このアプローチは、通信システム計算π計算に関するミルナーの研究でも使用されています。

ミルナーとホアによるこれらの初期のモデルは両方とも、有界非決定性の特性を持っていました。現代の理論的CSP([Hoare1985]および[Roscoe2005])は、無制限の非決定性を明示的に提供します。

ペトリネットとその拡張機能(カラーペトリネットなど)は、非同期メッセージパッシングと無制限の非決定性に基づいているという点でアクターに似ていますが、基本的な処理ステップ(遷移)とメッセージリポジトリの固定トポロジを定義しているという点で初期のCSPに似ています。 (場所)。

影響力

アクターモデルは、理論開発と実用的なソフトウェア開発の両方に影響を与えてきました。

理論

アクターモデルは、π計算とそれに続くプロセス計算の開発に影響を与えましたロビン・ミルナーはチューリングの講演で次のように書いています。[25]

現在、純粋なラムダ計算は、項と変数の2種類だけで構築されています。プロセス計算で同じ経済性を達成できますか?カール・ヒューイットは、アクターモデルを使用して、ずっと前にこの課題に対応しました。彼は、値、値の演算子、およびプロセスはすべて同じ種類のもの、つまりアクターでなければならないと宣言しました。

この目標は、表現の均一性と完全性を意味するため、私は感銘を受けました...しかし、代数微積分の観点から目標を達成する方法を理解するのはずっと前のことでした...

したがって、ヒューイットの精神では、最初のステップは、用語で示される、または名前でアクセスされるすべてのもの(値、レジスター、演算子、プロセス、オブジェクト)がすべて同じ種類のものであることを要求することです。それらはすべてプロセスである必要があります。

練習

アクターモデルは、商慣行に大きな影響を与えてきました。たとえば、Twitterはスケーラビリティのためにアクターを使用しています。[26]また、Microsoftは、非同期エージェントライブラリの開発にアクターモデルを使用しています。[27]以下のアクターライブラリとフレームワークのセクションには、他にも多くのアクターライブラリがリストされています。

対処された問題

Hewitt [2006]によると、アクターモデルは、コンピューターと通信のアーキテクチャ、並行プログラミング言語、および次のようなWebサービスの問題に対処します。

  • スケーラビリティ:ローカルと非ローカルの両方で並行性をスケールアップするという課題。
  • 透明性:ローカルと非ローカルの並行性の間の隔たりを埋めます。透明性は現在物議を醸している問題です。一部の研究者[誰? ]並行プログラミング言語(例えば、使用してローカルの同時実行の間の厳密な分離を提唱してきたJavaおよびC#を使用して、ローカル以外の同時実行から)SOAPをするためにWebサービス。厳密な分離は透明性の欠如を生み出し、Webサービスへのローカルアクセスと非ローカルアクセスを変更することが望ましい/必要な場合に問題を引き起こします(分散コンピューティングを参照)。
  • 矛盾:人間の情報システムの相互作用に関する非常に大規模な知識システムはすべて一貫性がないため、矛盾は標準です。この不整合は、内部的に不整合な非常に大規模なシステム(Microsoft Windowsソフトウェアなど)のドキュメントと仕様にまで及びます。

アクターモデルで導入されたアイデアの多くは、同じ理由マルチエージェントシステムにも適用されています[Hewitt2006b2007b]。主な違いは、エージェントシステム(ほとんどの定義)がアクターに追加の制約を課し、通常、アクターがコミットメントと目標を利用することを要求することです。

アクターを使ったプログラミング

多くの異なるプログラミング言語は、アクターモデルまたはそのバリエーションを採用しています。これらの言語は次のとおりです。

初期のアクタープログラミング言語

後のアクタープログラミング言語

アクターライブラリとフレームワーク

アクターが組み込まれていない言語でのアクタースタイルのプログラミングを可能にするために、アクターライブラリまたはフレームワークも実装されています。これらのフレームワークのいくつかは次のとおりです。

名前 状態 最新のリリース ライセンス 言語
反応した アクティブ 2021-09-05 Apache 2.0 Java
俳優 アクティブ 2020-04-16 [45] Apache-2.0 / MIT さび
バスティオン アクティブ 2020-08-12 [46] Apache-2.0 / MIT さび
Actix アクティブ 2020-09-11 [47] MIT さび
Aojet アクティブ 2016-10-17 MIT 迅速
俳優 アクティブ 2017-03-09 MIT Java
Actor4j アクティブ 2020-01-31 Apache 2.0 Java
Actr アクティブ 2019-04-09 [48] Apache 2.0 Java
Vert.x アクティブ 2018-02-13 Apache 2.0 Java、Groovy、Javascript、Ruby、Scala、Kotlin、Ceylon
ActorFx 非活性 2013-11-13 Apache 2.0 。ネット
アッカ(ツールキット) アクティブ 2019-05-21 [49] Apache 2.0 JavaとScala
Akka.NET アクティブ 2020-08-20 [50] Apache 2.0 。ネット
Remact.Net 非活性 2016-06-26 MIT .NET、Javascript
アテジPX 非活性 Java
czmq アクティブ 2016-11-10 MPL-2 NS
F#MailboxProcessor アクティブ F#(組み込みコアライブラリ)と同じ Apacheライセンス NS#
コーラス アクティブ 2010-02-04 GPL 3 Java
キリム[51] アクティブ 2018-11-09 [52] MIT Java
ActorFoundry(Kilimに基づく) 非活性 2008-12-28 Java
ActorKit アクティブ 2011-09-13 [53] BSD Objective-C
クラウドハスケル アクティブ 2015-06-17 [54] BSD Haskell
CloudI アクティブ 2021-05-27 [55] MIT ATS、C / C ++、Elixir / Erlang / LFE、Go、Haskell、Java、Javascript、OCaml、Perl、PHP、Python、Ruby
クラッター アクティブ 2017-05-12 [56] LGPL 2.1 C、C ++(cluttermm)、Python(pyclutter)、Perl(perl-Clutter)
NAct 非活性 2012-02-28 LGPL 3.0 。ネット
ナクト アクティブ 2018-06-06 [57] Apache 2.0 JavaScript / ReasonML
Retlang 非活性 2011-05-18 [58] 新しいBSD 。ネット
JActor 非活性 2013-01-22 LGPL Java
Jetlang アクティブ 2013-05-30 [59] 新しいBSD Java
Haskell-俳優 アクティブ? 2008年 新しいBSD Haskell
GPars アクティブ 2014-05-09 [60] Apache 2.0 Groovy
OOSMOS アクティブ 2019-05-09 [61] GPL 2.0および商用(デュアルライセンス) C. C ++対応
パニーニ アクティブ 2014-05-22 MPL 1.1 プログラミング言語自体
会談 アクティブ? 2007-22-07 GPL 2.1 Python
Peernetic アクティブ 2007-06-29 LGPL 3.0 Java
ピコス アクティブ 2020-02-04 MIT KRL
PostSharp アクティブ 2014-09-24 コマーシャル/フリーミアム 。ネット
パルサー アクティブ 2016-07-09 [62] 新しいBSD Python
パルサー アクティブ 2016-02-18 [63] LGPL / Eclipse Clojure
ピッカ アクティブ 2019-05-07 [64] Apache 2.0 Python
シロアリスキーム アクティブ? 2009-05-21 LGPL スキーム(ギャンビットの実装)
セロン 非アクティブ[65] 2014-01-18 [66] MIT [67] C ++
Thespian アクティブ 2020-03-10 MIT Python
クエーサー アクティブ 2018-11-02 [68] LGPL / Eclipse Java
Libactor アクティブ? 2009年 GPL 2.0 NS
俳優-CPP アクティブ 2012-03-10 [69] GPL 2.0 C ++
S4 非活性 2012-07-31 [70] Apache 2.0 Java
C ++アクターフレームワーク(CAF) アクティブ 2020-02-08 [71] Boost Software License1.0およびBSD3-Clause C ++ 11
セルロイド アクティブ 2018-12-20 [72] MIT ルビー
LabVIEWアクターフレームワーク アクティブ 2012-03-01 [73] National Instruments SLA LabVIEW
LabVIEWメッセンジャーライブラリ アクティブ 2021-05-24 BSD LabVIEW
軌道 アクティブ 2019-05-28 [74] 新しいBSD Java
リアルタイム組み込みシステム用のQPフレームワーク アクティブ 2019-05-25 [75] GPL 2.0および商用(デュアルライセンス) CおよびC ++
libprocess アクティブ 2013-06-19 Apache 2.0 C ++
SObjectizer アクティブ 2020-05-09 [76] 新しいBSD C ++ 11
ローター アクティブ 2020-10-23 [77] MITライセンス C ++ 17
オルレアン アクティブ 2021-09-03 [78] MITライセンス C#/。NET
スカイネット アクティブ 2020-12-10 MITライセンス C / Lua
Reactors.IO アクティブ 2016-06-14 BSDライセンス Java / Scala
libagents アクティブ 2020-03-08 自由ソフトウェアライセンス C ++ 11
Proto.Actor アクティブ 2021-01-05 自由ソフトウェアライセンス Go、C#、Python、JavaScript、Java、Kotlin
FunctionalJava アクティブ 2018-08-18 [79] BSD3-条項 Java
ライカー アクティブ 2019-01-04 MITライセンス さび
コメディ アクティブ 2019-03-09 EPL 1.0 JavaScript
VLINGOXOOM俳優 アクティブ 2017-12-20 Mozilla Public License 2.0 Java、Kotlin、JVM言語、C#.NET
wasmCloud アクティブ 2021-03-23 Apache 2.0 WebAssembly(Rust、TinyGo、Zig、AssemblyScript)
レイ アクティブ 2020-08-27 Apache 2.0 Python

も参照してください

参考文献

  1. ^ ヒューイット、カール; 司教、ピーター; シュタイガー、リチャード(1973)。「人工知能のための普遍的なモジュラーアクター形式」。IJCAI。 引用ジャーナルには|journal=ヘルプが必要です
  2. ^ a b c d ウィリアム・クリンガー(1981年6月)。「俳優セマンティクスの基礎」。数学博士論文。MIT。hdl1721.1 / 6935 引用ジャーナルには|journal=ヘルプが必要です
  3. ^ a b アイリーングライフ(1975年8月)。「並列プロセスの通信のセマンティクス」。EECS博士論文。MIT。 引用ジャーナルには|journal=ヘルプが必要です
  4. ^ B ヘンリー・ベイカーカールヒューイット(1977年8月)。「並列プロセスを伝達するための法律」。IFIP。 引用ジャーナルには|journal=ヘルプが必要です
  5. ^ 「並列プロセスを伝達するための法律」(PDF)1977年5月10日。
  6. ^ a b c Gul Agha(1986)。「アクター:分散システムにおける並行計算のモデル」。博士論文。MITプレス。hdl1721.1 / 6952 引用ジャーナルには|journal=ヘルプが必要です
  7. ^ 「家」Osl.cs.uiuc.edu。2013-02-22にオリジナルからアーカイブされまし2012年12月2取得
  8. ^ カール・ヒューイット。メッセージを渡すパターンとしての制御構造の表示Journalof ArtificialIntelligence。1977年6月。
  9. ^ a b Gul Agha; イアンメイソン; スコットスミス; キャロリン・タルコット(1993年1月)。「俳優計算の基礎」。機能プログラミングジャーナル
  10. ^ カール・ヒューイット(2006-04-27)。「コミットメントとは何ですか?物理的、組織的、社会的」(PDF)COIN @AAMAS。 引用ジャーナルには|journal=ヘルプが必要です
  11. ^ マウロガスパリ; Gianluigi Zavattaro(1997年5月)。「俳優の代数」(PDF)オープンオブジェクトベースの分散システムのための正式な方法テクニカルレポートUBLCS-97-4。ボローニャ大学。pp。3–18。土井10.1007 / 978-0-387-35562-7_2ISBN  978-1-4757-5266-3
  12. ^ M。ガスパリ; G. Zavattaro(1999)。「俳優の代数」。オープンオブジェクトベースシステムの形式手法。 引用ジャーナルには|journal=ヘルプが必要です
  13. ^ Gul Agha ; プラザンナタティ(2004)。「アクターの代数理論とその単純なオブジェクトベース言語への応用」(PDF)OOからFM(Dahl Festschrift)LNCS2635へ。2004年4月20日にオリジナル(PDF)からアーカイブされまし 引用ジャーナルには|journal=ヘルプが必要です
  14. ^ ジョン・ダーリントン; YK郭(1994)。「線形論理におけるアクターの形式化」。オブジェクト指向情報システムに関する国際会議。 引用ジャーナルには|journal=ヘルプが必要です
  15. ^ 「アクターモデルとは何ですか?いつ使用する必要がありますか?」マットフェルデラー2021825日取得
  16. ^ Cheung、Leo(2017-07-25)。「なぜAkkaとアクターモデルがIoTアプリケーションに輝いているのか」InfoWorld 2021825日取得
  17. ^ ハンセン、パーブリンチ(2002)。並行プログラミングの起源:セマフォからリモートプロシージャコールまでスプリンガー。ISBN 978-0-387-95401-1
  18. ^ ハンセン、パーブリンチ(1996)。「モニターと同時パスカル:個人の歴史」。ACMの通信:121–172。
  19. ^ Hoare、Tony(1974年10月)。「モニター:オペレーティングシステムの構造化の概念」。ACMの通信17(10):549–557。土井10.1145 /355620.361161S2CID 1005769 
  20. ^ ハンセン、パーブリンチ(1973年7月)。オペレーティングシステムの原則プレンティスホール。
  21. ^ a b ヒューイット、カール(2012)。「計算とは?アクターモデルとチューリングモデル」。ゼニルでは、ヘクター(編)。計算可能な宇宙:計算を理解し、計算として自然を探求する。アラン・M・チューリングの生誕100周年を記念して捧げます。世界科学出版社。
  22. ^ フレデリックナベ。Choice PARLE1992を使用したチャネルベースの通信用の分散プロトコル
  23. ^ ロビンミルナー。プロセス:Logic Colloquium1973のコンピューティングエージェントの数学的モデル。
  24. ^ CARホア。シーケンシャルプロセスCACMの通信1978年8月。
  25. ^ ミルナー、ロビン(1993)。「相互作用の要素」ACMの通信36:78–89。土井10.1145 /151233.151240
  26. ^ 「Twitterのスケーリング方法«WaimingMokのブログ」Waimingmok.wordpress.com。2009-06-27 2012年12月2取得
  27. ^ 非同期エージェントライブラリを使用したアクターベースのプログラミング」MSDN 2010年9月。
  28. ^ ヘンリーリーバーマン(1981年6月)。「第1幕のプレビュー」。MIT AIメモ625 HDL1721.1 / 6350 引用ジャーナルには|journal=ヘルプが必要です
  29. ^ ヘンリーリーバーマン(1981年6月)。「混乱することなく一度にたくさんのことを考える:第1幕の並列性」。MIT AIメモ626 HDL1721.1 / 6351 引用ジャーナルには|journal=ヘルプが必要です
  30. ^ ジャンピエールブリオ。Acttalk:オブジェクト指向並行プログラミングのフレームワーク-設計と経験第2回日仏ワークショップ。1999年。
  31. ^ ケンカーン。アニメーションの計算理論MITEECS博士論文。1979年8月。
  32. ^ WilliamAthasとNanetteBoden Cantor:オブジェクトベースの並行プログラミングに関するNSFワークショップの議事録における科学計算のためのアクタープログラミングシステム1988年。SIGPLAN通知の特集号。
  33. ^ ダレル・ヴェルク。ロゼットを使用したInfoSleuthエージェントの開発:インテリジェント情報エージェントに関するCIKM'95ワークショップのアクターベースの言語議事録。1995年。
  34. ^ Dedecker J.、Van Cutsem T.、Mostinckx S.、D'Hondt T.、De MeuterW.AmbientTalkでのアンビエント指向プログラミング。「オブジェクト指向プログラミングに関する第20回欧州会議(ECOOP)の議事録、Dave Thomas(Ed。)、Lecture Notes in Computer ScienceVol。4067、pp。230-254、Springer-Verlag。」、2006年
  35. ^ Darryl K. Taft(2009-04-17)。「MicrosoftCookingUp New ParallelProgrammingLanguage」Eweek.com 2012年12月2取得
  36. ^ 「腐植土」Dalnefre.com 2012年12月2取得
  37. ^ Brandauer、Stephan; etal。(2015)。「マルチコア用の並列オブジェクト:並列言語アンコールを垣間見る」。マルチコアプログラミングの正式な方法Springer International Publishing:1–56。
  38. ^ 「ポニー言語」
  39. ^ クレブシュ、シルバン; Drossopoulou、ソフィア; 祝福、セバスチャン; マクニール、アンディ(2015)。「安全で高速なアクターの機能を拒否する」。アクター、エージェント、および分散制御に基づくプログラミングに関する第5回国際ワークショップの議事録-AGERE!2015pp。1–12。土井10.1145 /2824815.2824816ISBN 9781450339018S2CID  415745 シルバン・クレブシュ、ソフィア・ドロッソプロウ、セバスチャン・ブレッシング、アンディ・マクニール
  40. ^ 「P言語」2019-03-08。
  41. ^ 「P#言語」2019-03-12。
  42. ^ Carlos Varela and Gul Agha(2001)。「SALSAを使用した動的に再構成可能なオープンシステムのプログラミング」。ACMSIGPLAN通知。OOPSLA'2001興味深いテクノロジートラック議事録36
  43. ^ フィリップ・ハラーとマーティン・オーダスキー(2006年9月)。「制御の反転のないイベントベースのプログラミング」(PDF)手順 JMLC2006。 引用ジャーナルには|journal=ヘルプが必要です
  44. ^ フィリップ・ハラーとマーティン・オーダスキー(2007年1月)。「スレッドとイベントを統合するアクター」(PDF)テクニカルレポートLAMP2007。2011年6月7日のオリジナル(PDF)からアーカイブ2007年12月10取得 引用ジャーナルには|journal=ヘルプが必要です
  45. ^ "acteur-0.9.1・David Bonet・Crates.io"crates.io 2020416日取得
  46. ^ Bulut、Mahmut(2019-12-15)。"Bastion onCrates.io"Crates.io 20191215日取得
  47. ^ "actix-0.10.0・Rob Ede・Crates.io"crates.io 2021-02-28を取得
  48. ^ 「リリース・zakgof / actr・GitHub」Github.com 2019416日取得
  49. ^ 「Akka2.5.23リリース・Akka」アッカ。2019-05-21 20196月3取得
  50. ^ Akka.NETv1.4.10安定版リリースGitHub-akkadotnet / akka.net:.NET用のAkkaアクターの移植。、Akka.NET、2020年10月1日には、取得した2020年10月1日を
  51. ^ Srinivasan、Sriram; アランマイクロフト(2008)。「Kilim:Java用の分離型アクター」(PDF)オブジェクト指向プログラミングに関する欧州会議ECOOP2008キプロス2016年2月25日取得
  52. ^ 「リリース・kilim / kilim・GitHub」Github.com 20196月3取得
  53. ^ 「コミット履歴・stevedekorte / ActorKit・GitHub」Github.com 2016年2月25日取得
  54. ^ 「コミット履歴・haskell-distributed / Distributed-process・GitHub」Github.com 2012年12月2取得
  55. ^ 「リリース・CloudI / CloudI・GitHub」Github.com 2021621日取得
  56. ^ 「タグ・GNOME /クラッター・GitLab」gitlab.gnome.org 20196月3取得
  57. ^ 「リリース・ncthbrt / nact・GitHub」20196月3取得
  58. ^ 「変更点-retlang-.NETでのメッセージベースの同時実行性-Googleプロジェクトホスティング」2016年2月25日取得
  59. ^ "jetlang-0.2.9-bin.zip --jetlang --jetlang-0.2.9-bin.zip --Javaのメッセージベースの同時実行性-Googleプロジェクトホスティング"2012-02-14 2016年2月25日取得
  60. ^ 「GParsリリース」GitHub 2016年2月25日取得
  61. ^ 「リリース・oosmos / oosmos・GitHub」GitHub 20196月3取得
  62. ^ 「パルサーのデザインと俳優」2015年7月4日にオリジナルからアーカイブされまし
  63. ^ 「パルサーのドキュメント」アーカイブされたオリジナルの2013年7月26日に。
  64. ^ 「変更– Pykka2.0.0ドキュメント」pykka.org 20196月3取得
  65. ^ 「セロン–アシュトンメイソン」2018829日取得
  66. ^ 「Theron-バージョン6.00.02がリリースされました」Theron-library.com。2016年3月16日にオリジナルからアーカイブされまし2016年2月25日取得
  67. ^ 「テロン」Theron-library.com。2016年3月4日にオリジナルからアーカイブされまし2016年2月25日取得
  68. ^ 「リリース・puniverse / quasar・GitHub」20196月3取得
  69. ^ 「変更-actor-cpp-C ++のアクターモデルの実装-Googleプロジェクトホスティング」2012年12月2取得
  70. ^ 「コミット履歴・s4 / s4・Apache」apache.org。2016年3月6日にオリジナルからアーカイブされまし2016年1月16日取得
  71. ^ 「リリース・アクターフレームワーク/アクターフレームワーク・GitHub」Github.com 2020年3月7日取得
  72. ^ 「セルロイド| RubyGems.org |あなたのコミュニティの宝石ホスト」RubyGems.org 20196月3取得
  73. ^ 「コミュニティ:Actor Framework、LV 2011リビジョン(バージョン3.0.7)」Decibel.ni.com。2011-09-23 2016年2月25日取得
  74. ^ 「リリース・orbit / orbit・GitHub」GitHub 20196月3取得
  75. ^ 「QPReal-TimeEmbedded Frameworks&Tools-Browse Filesat」Sourceforge.net 20196月3取得
  76. ^ 「リリース・Stiffstream / sobjectizer・GitHub」GitHub 2019619日取得
  77. ^ 「リリース・basiliscos / cpp-rotor・GitHub」GitHub 20201010日取得
  78. ^ 「リリース・dotnet / orleans・GitHub」GitHub 2021-09-03を取得しました
  79. ^ 「FunctionalJavaリリース」GitHub 2018823日取得

さらに読む

外部リンク