私自身の質問に対する私自身の答えのように、私はキューに到着する多数のイベントを処理している状況にあります。各イベントはまったく同じ方法で処理され、他のすべてのイベントとは独立して処理することもできます。
私のプログラムはScala並行性フレームワークを利用しており、関連するプロセスの多くはActor
sとしてモデル化されています。はメッセージを順番に処理するため、このActor
特定の問題にはあまり適していません(他のアクターが順番にアクションを実行している場合でも)。Scalaにすべてのスレッド作成を「制御」させたいので(そもそも並行性システムを持っているという点だと思います)、2つの選択肢があるようです。
- 私が管理しているイベントプロセッサのプールにイベントを送信します
Actor
他のメカニズムでそれらを同時に処理するように指示します
#1は、アクターサブシステムを使用するポイントを否定すると思います。プロセッサーアクターをいくつ作成する必要がありますか?1つの明白な質問です。これらのことはおそらく私から隠されており、サブシステムによって解決されています。
私の答えは次のことをすることでした:
val eventProcessor = actor {
loop {
react {
case MyEvent(x) =>
//I want to be able to handle multiple events at the same time
//create a new actor to handle it
actor {
//processing code here
process(x)
}
}
}
}
より良いアプローチはありますか?これは間違っていますか?
編集:おそらくより良いアプローチは次のとおりです:
val eventProcessor = actor {
loop {
react {
case MyEvent(x) =>
//Pass processing to the underlying ForkJoin framework
Scheduler.execute(process(e))
}
}
}