2016-10-31 15 views
1

私はJava Play Frameworkにアプリケーションを持っており、ユーザーは複数のタスクを同時に実行することができ、完了に時間がかかることがあります。私はそれをするためにactorSystem.scheduler()を使うことができると思った。しかし、私はいくつかのテストを行い、ユーザーが同時に4つのタスクを実行できることが分かっていれば、サーバーが提供できる以上のリソースをタスクに費やすことになります。では、Akkaスケジューラで同時に実行されているタスクの数を制限する方法はありますか?akkaスケジューラで実行中のタスクの数を制限する方法は?

答えて

2

同時タスクをグローバルに制限する場合は、akka max pool sizeをその数に設定できます。コンフィギュレーションに関する情報はこちらです:

akka.actor.default-dispatcher.fork-join-executor.pool-size-max = 64 

あなたが同時に実行したいタスクの最大数に設定することができます。https://playframework.com/documentation/2.5.x/JavaAkka

は具体的には、設定があります。これは、使用されるスレッドの数です。

+0

10個のタスクに制限を設け、ユーザーが別のタスクを送信したとします。この新しいタスクはどうなりますか? Akkaはそれをキューなどに配置しますか?そして、プールサイズを変更すると、スケジューラ上の並行タスクの数よりも変化するだろうと思いますが、要求をどのように処理するのか、私は正しいのでしょうか? – pedroct92

+0

はい、Akkaは耐久性のあるメールボックスのコンセプトを使用しています(デフォルトはそうではありません):http://doc.akka.io/docs/akka/snapshot/scala/mailboxes.html。デフォルトは無制限のメモリ内メールボックスですが、このページに記載されているような耐久性のあるメールボックスがあります:http://doc.akka.io/docs/akka/2.1.0/modules/durable-mailbox.html – Jamie

+0

この機能でのみ使用できる新しいディスパッチャを作成できるので、デフォルトのディスパッチャを使用する他のものには影響しません。ありがとう@Jamie。 – pedroct92

0

スケジューラオブジェクトを格納するプール(blockingLinkQueueでもかまいません)を使用します。

ユーザーがいる場合は、プールからインスタンスを取得してください。それ以外の場合は待機します。そうすれば、あなたはuシステムで使用する最大スケジューラーを制御できます。

関連する問題