web-dev-qa-db-ja.com

アクターモデルにフォークジョインする

私が読んでいるのは 論文 アクターモデルについてであり、それを使用してフォーク結合動作を実装する方法について説明しています。

アクターのシステムが、ある値を計算するように要求されたときに、それらの間で負荷を分割し、結果を組み合わせて最終的な答えを形成する方法を考えてみましょう。アクターFは、値f(x) = h(g1(x)、g2(x))を計算し、アクターRに応答を送信する要求メッセージを受信します。次にアクターFは、アクターHは、g1(x)を計算してHに応答を送信するように要求するメッセージをG1に送信します。同時に、Fはg2(x)を計算し、Hに応答を送信するように要求するメッセージをG2に送信します。 G2は両方とも合計であり、HはG1とG2の両方から、それぞれ値g1(x)とg2(x)を含むメッセージを受信します。Hのアービターにより、これら2つのメッセージは何らかの順序でHに到着することが保証されます。ただし、順序を予測することはできません。したがって、Hへの応答メッセージには、G1またはG2によってそれぞれ送信されたことをHに通知するインジケーター1または2も含まれます。Hのスクリプトは、HがG1とG2の両方から応答を受信しました。応答がある場合は、h(g1(x)、g2(x))を計算し、その値をRに送信します。

さて、私がよくわからないのは一節です。

Hのスクリプトは、HがG1とG2の両方から応答を受信するまで待機し、受信した場合はh(g1(x)、g2(x))を計算し、その値をRに送信することを指定します。

これは、アクターHがこれらのメッセージを受信するために一種の「ビジーウェイト」になっている必要があることを意味しますか?もしそうなら、アクターはアクティブに実行されているため、メッセージを受信できませんか?

私はそれを読みすぎていて、両方のメッセージが到着するとアクターがアクティブ化されることを意味しているだけですか?

3
Shoe

Hはスピンを待っていないと思います。エージェントは受信したメッセージを操作することを思い出してください。そのため、受信トレイへの最初のメッセージを受信しますが、2番目の結果が到着するまで何もできません。したがって、(おそらく後でメッセージを保存して)別のメッセージがそれを起こすまでスリープ状態に戻ります。 2番目のメッセージを受信すると、h(message1, message2)を処理し、結果メッセージをRに送信します。

Message1とmessage2がそれぞれg1(x)とg2(x)の結果であるという事実は、エージェントHとは関係ありません。その結果、2つのメッセージが属するコンテキストを提供するために、多くの場合、何らかの識別子(ハンドル)が必要になります。一緒。

2
Kasey Speakman