長時間実行される計算を (1 台のマシンで) 同時に実行したい場合は、Akka アクターが役に立ちます。
1 つのアプローチは、作品ごとに新しいアクターを生成することです。何かのようなもの
while(true) {
val actor = system.actorOf(Props[ProcessingActor])
(actor ? msg).map {
...
system.stop(actor)
}
}
2 番目のアイデアは、ルーターの背後に一定数のアクターを構成することです。そして、すべてのメッセージをルーターに送信します。
val router = system.actorOf(Props[ProcessingActor].withRouter(RoundRobinRouter(nrOfInstances = 5)))
while(true) {
(router ? msg).map { ... }
}
システムが過負荷になっている場合 (受信メッセージのレートが処理レートよりも高い場合)、どちらが優れているのでしょうか?
どちらが長持ちしますか? そして、どちらも最終的に OOMError でシステムを爆破するのでしょうか?