(1台のマシン上で)長時間実行する計算を同時に実行したい場合は、Akkaのアクターが役立ちます。Akka:メールボックスを埋める対俳優の産卵
1つのアプローチは、各作業ごとに新しいアクタをスポーンすることです。何かのように
while(true) {
val actor = system.actorOf(Props[ProcessingActor])
(actor ? msg).map {
...
system.stop(actor)
}
}
2番目のアイデアは、ルータの背後にある設定された数のアクターを設定することです。すべてのメッセージをルータに送信します。
システムがオーバーロードされている(受信したメッセージの速度が処理速度よりも高い)方が良いでしょうか?
どれが長く続きますか?そして、どちらも最終的にOOMErrorでシステムを爆破するだろうか?
合意 - この種のユースケースには先物が優れています。 – sourcedelica
@ericacm私は同意しません。同じように多くの作業を行い、何らかのエラー処理(例えば、再起動の失敗)が必要であることがわかっている場合。次に、作業を処理するために設定された数のアクタを定義することは、はるかに信頼性の高いようです。次に、アクターは、メッセージ内で行うべき作業を受け取り、それを処理し、応答を送信します。アクタがクラッシュした場合(何らかの理由で)、スーパーバイザが再起動し、再試行を指示します。先物を使って、これはやりにくいと確信しています(確かに不可能ではありませんが、より困難です)。しかし、私はそれがユースケースに依存していると思います。明確にするために –
Thx。俳優がメッセージよりも高価であることを意味する。 – rompetroll