28

私の最近の質問への回答は、攻撃者が一度に 1 つずつメッセージを処理したことを示していました。これは本当ですか?次のスニペットを含む ( Scalaでのプログラミングで) 明示的に言っているものは何もありません(pp. 593)

[reactメソッド] が処理可能なメッセージを見つけた場合、[メソッド] は後で実行するためにそのメッセージの処理をスケジュールし、例外をスローします。

(私自身を強調してください)。2 つの関連する (そして相互に排他的な) 質問:

  1. アクターが複数のメッセージを同時に処理できると仮定すると、アクターにメッセージを一度に 1 つずつ処理させるにはどうすればよいでしょうか (これがやりたい場合)。( receive?)
  2. アクターが一度に 1 つずつメッセージを処理すると仮定すると、実際にメッセージを同時に処理できるアクターをどのように実装するのが最善でしょうか?

編集: 少しテストを行うと、私が間違っていて、アクターが実際にシーケンシャルであることがわかります。それで、私が答える必要があるのは質問#2です

4

4 に答える 4

6

答えは、Actorメッセージを非同期的に処理できないということだと思います。Actorこれらのメッセージを非同期的に処理できるメッセージをリッスンする必要がある場合は、次のように記述できます。

val actor_ = actor {

  loop {
    react {
      case msg =>
        //create a new actor to execute the work. The framework can then 
        //manage the resources effectively
        actor {
          //do work here
        }
      }
    }
  }
于 2009-06-17T14:13:53.940 に答える
0

複数のことをしたい場合は、複数のアクターを使用する必要があります。アクターを使用する全体的な理由は、作業を複数の独立したプロセスに分割することです。

于 2009-06-17T13:39:19.907 に答える