5

Erlang は同時実行性をサポートするためにアクター モデルを使用し、Erlang プロセスはアクターと同じであることを知っています: メッセージを送信し、不変などです。しかし、Carl Hewitt によれば、アクター モデルで重要なことの 1 つは、不確定性とアービターです (アービターが与えられた場合、複数の入力 (I0 と I1 など) を同時にアービターに入れることができますが、考えられる結果 (O0 など) の 1 つだけです)。または O1) が反対側に出てきます)。

興味深いことに、Erlang はこの概念をどのように実装したのでしょうか? また、Erlang の同時実行モデル/アクター モデルの実装におけるアービターの役割には何が使われているのでしょうか?

4

1 に答える 1

10

これは非常に哲学的になります (たとえばhttps://en.wikipedia.org/wiki/Indeterminacy_in_concurrent_computationを参照)。しかし、私が知る限り、彼はアクター モデルでは、アクターが複数の入力を持つときは常に魔法の箱があると言っています。これは、受信メッセージの順序を任意の方法で決定します。これは、一部のメッセージを任意の長い (制限のある) 時間遅らせることを意味する場合でもです。つまり、プログラム構造が特定の到着順序を優先しているように見えても、並列メッセージを受信するために特定の順序や時間に依存することはできません。(これはアクター プログラムを推論するための理論的概念であることに注意してください。テスト目的を除いて、実際にはシステムを不必要にランダムにしようとはしません。)

Erlang メッセージ パッシングのセマンティクスは、ほとんど同じことを言っています。受信者のメールボックス。すべてのプロセスが同じ Erlang VM 内で実行されている場合でも、それらは任意に遅延する可能性があります。繰り返しますが、これはプログラマーとして得られる保証 (なし) に関するものであり、Erlang VM にランダムな遅延を挿入させることに関するものではありません。(ランダムな遅延は、ページ フォールトに対する OS レベルの一時停止など、他の要因によって自然に発生する可能性があります。)

于 2016-11-09T16:40:50.400 に答える