8

Scala と関数型プログラミングを学び始めています。!Programming scala: Tackle Multi-Core Complexity on the Java Virtual Machine」という本を読んでいました。最初の章で、イベント駆動型の同時実行性とアクター モデルという言葉を見ました。この本を読み続ける前に、イベント駆動型の同時実行またはアクター モデルに関するアイデア。

イベント ドリブンの同時実行とは何ですか? また、アクター モデルとどのように関連していますか?

4

3 に答える 3

3

Theon's answer は、優れた最新の概要を提供します。歴史的な視点を追加したいと思います。

Tony Hoare と Robert Milner は、並行システム (Communicating Sequential Processs、CSP、および Communicating Concurrent Systems、CCS) を分析するための数学的代数を開発しました。これらはどちらも私たちのほとんどにとって重い数学のように見えますが、実際の適用は比較的簡単です. CSP は、特に Go が最新の例である Occam プログラミング言語に直接つながりました。CCS は、円周率計算と通信チャネル端の可動性につながりました。これは、Go の一部であり、過去 10 年ほどで Occam に追加された機能です。

CSP は、単純にイベント交換によって相互作用する自律的なエンティティ (「プロセス」、v. グリーン スレッドなどの軽量のもの) を考慮することによって、同時実行をモデル化します。イベントを渡すための媒体はチャネルに沿っています。プロセスは、いくつかの入力または出力を処理する必要がある場合があり、最初に準備ができているイベントを選択することによってこれを行います。イベントは通常、送信者から受信者にデータを運びます。

CSP モデルの主な特徴は、プロセスのペアが両方の準備が整った場合にのみ通信を開始することです。実際には、これは通常「同期」通信と呼ばれるものになります。ただし、実際の実装 (Go、Occam、Akka) では、チャネルをバッファリング (Akka の通常の状態) できるため、多くの場合、イベントのロックステップ交換が実際には分離されます。

つまり、イベント駆動型の CSP ベースのシステムは、チャネルによって接続されたプロセスのデータ フロー ネットワークです。

イベント駆動型の CSP 解釈以外にも、他にもあります。重要な例は、'イベント ホイール' アプローチです。これは、実際には単一の処理スレッドを持ちながら並行システムをモデル化するためにかつて人気がありました。このようなシステムは、イベントを処理キューに入れ、通常はコールバックを介して適宜処理することでイベントを処理します。Java Swing のイベント処理エンジンが良い例です。他にも、時間ベースのシミュレーション エンジンなどがあります。Javascript / NodeJS モデルもこのカテゴリに当てはまると考える人もいるかもしれません。

要約すると、イベント ホイールは並行性を表現する方法ですが、並列性はありません。

皮肉なことに、上で説明した 2 つのアプローチはどちらもイベント ドリブンとして説明されていますが、イベント ドリブンの意味はそれぞれの場合で異なります。あるケースでは、ハードウェアのようなエンティティが相互に接続されています。もう 1 つは、ほとんどすべてのアクションがコールバックによって実行されます。CSP アプローチは、完全に構成可能であるため、スケーラブルであると主張しています。当然、並列実行にも長けています。どちらか一方を優先する理由があるとすれば、これらがおそらくそれです。

于 2013-06-12T22:15:37.190 に答える