7

erlang のメッセージ ループはどのように機能しますか?メッセージの処理に関しては同期しますか?

私が理解している限り、ループはメッセージを「受信」して開始し、何かを実行してループの別の反復にヒットします。

それで、それは同期しなければなりませんか?右?

複数のクライアントが同じメッセージ ループにメッセージを送信する場合、それらのメッセージはすべてキューに入れられ、次々に実行されますか?

複数のメッセージを並行して処理するには、異なるプロセスで複数のメッセージ ループを生成する必要があります。

それとも私はそれをすべて誤解しましたか?

4

2 に答える 2

9

メッセージの送信は非同期です。各プロセスには独自の (そして 1 つのみの) メールボックスがあるため、メッセージの処理は同期的です。一度に 1 つのメッセージが受信されます。

于 2010-05-31T12:12:00.583 に答える
4

マニュアルから ( Erlang の同時実行性

各プロセスには、受信するメッセージ用の独自の入力キューがあります。受信した新しいメッセージは、キューの最後に置かれます。プロセスが受信を実行すると、キュー内の最初のメッセージが受信内の最初のパターンと照合されます。これが一致すると、メッセージはキューから削除され、パターンに対応するアクションが実行されます。
ただし、最初のパターンが一致しない場合、2 番目のパターンがテストされ、これが一致する場合、メッセージはキューから削除され、2 番目のパターンに対応するアクションが実行されます。2 番目のパターンが一致しない場合は、3 番目のパターンが試行され、テストするパターンがなくなるまで繰り返されます。テストするパターンがこれ以上ない場合は、最初のメッセージがキューに保持され、代わりに 2 番目のメッセージが試行されます。これがいずれかのパターンに一致する場合、適切なアクションが実行され、2 番目のメッセージがキューから削除されます (最初のメッセージとその他のメッセージはキューに保持されます)。2 番目のメッセージが一致しない場合は、キューの最後に到達するまで 3 番目のメッセージを試します。キューの最後に到達すると、プロセスはブロック (実行を停止) し、新しいメッセージが受信されるまで待機して、この手順が繰り返されます。
もちろん、Erlang の実装は「巧妙」であり、各メッセージが各受信のパターンに対してテストされる回数を最小限に抑えます。

したがって、正規表現を使用してプリオを作成できますが、同時実行は複数のプロセスを介して行われます。

于 2010-05-31T12:05:04.470 に答える