0

私はSpringのスケジューリングを使用しています.1つは実行時間の短いタスク用、もう1つは実行時間の長いタスク用の別々のスケジューラーが必要です。

この主な理由は次のとおりです。

  • このコンテキストでは、短時間実行タスクは長時間実行タスクよりもミッション クリティカルです (短時間実行タスクは毎分実行する必要があり、長時間実行タスクは 1 時間に 1 回実行する必要があります)。
  • シングル スレッド モードを構成した場合、実行時間の長いタスクが実行時間の短いタスクをブロックします。
  • スレッド プール サイズを誤って構成すると、実行時間の長いタスクが実行時間の短いタスクをブロックする可能性がありました。

このようにタスクを個別のスケジューラに分割することに何か問題がありますか?それとも、アプリ内で常に単一のスケジューラを使用してプールサイズを大きくするという慣習ですか?

私はスケジューリング/タスク分割パターンを認識していないので、どんな支援も素晴らしいでしょう. この質問には、これに代わる可能性のあるフレームワークがあることを無視したいと思います(おそらく春のバッチのように)。デザインの選択と、それが間違っている理由にもっと興味があります。

4

3 に答える 3

0

Quartz 2.0 を使用している場合は、複数の (クラスター化されていない) スケジューラー インスタンスに同じ一連の Quartz テーブルを使用させることができますunique instance names。そのため、重要なジョブを 1 つのスケジューラーに簡単に割り当てることができconfigure separate thread pool sizes、他のスケジューラーにはそれほど重要ではありません。また、すべての Quartz テーブルに SCHED_NAME 列があるため、スケジューラ インスタンス名を使用してジョブを簡単に分離できます。

実行時間の長いタスクが実行時間の短いタスクのスレッドプールをブロックする可能性があることを非常に正しく指摘した理由として、これは正当だと思います。

于 2014-07-16T07:55:42.273 に答える
0

複数のスケジューラを構成できますが、適切なスレッドプールの設定を検討する必要があります (& する必要があります)。毎時間実行されるタスクがほとんどなく、毎晩実行されるタスクも少ないという同様のケースがあります。適切な corePoolSize と maxPoolSize を設定することが、複数のジョブのスケジューリングを成功させる鍵となります。それに加えて、スレッド制限に達した日を節約するために queueCapacity を設定する可能性が常にあります。

于 2014-07-16T08:31:14.273 に答える