2013-03-02 17 views
6

私はQuartz.netを使用する社内で使用するジョブスケジューリングシステムのアップグレードに取り組んでいます。最新バージョンのQuartzのソースを見ると、.NET 4.0で出荷されたスレッドプール(System.Threading.Tasksのもの)が大幅に改善されたのに対して、独自のスレッドプール実装が使用されていることに気付きました。Quartz.net +タスク並列ライブラリ

スケジューリング機能にはQuartz.netを、スレッドプーリングにはTPLを使用するジョブスケジューリングシステムを誰も正常に実装しているかどうか不思議です。 QuartzのスレッドプールをTPLのスレッドプールと交換するのは比較的簡単ですか? QuartzはTasksの世界ではまだまだ関連性がありますか?また、.NET 4.xのスレッドプール(コア認識、ローカルキュー、改良されたロックなど)の大きな改善点として販売されているQuartzのスレッドプールは、一般的な粗粒のバックグラウンドジョブに十分であり、価値がありませんミックスにTPLを強制する努力?

これら2つのツールを一緒に使用する(または使用しない)ことについての洞察は、事前にお知らせください。

答えて

3

Quartz.NETは、TPLとは少し異なる問題を解決するためのものです。 Quartz.NETは、実行時間の豊富な機能セットを持つ定期的なジョブスケジューリングを意図しています。一方、TPLは、計算作業負荷の高性能並列実行を目的としています。

本質的には、すべてのコンピューティングリソース(コアなど)を利用してできるだけ早く完了する必要のある作業負荷のために、精密スケジューリングとTPLのためにQuartz.NETを使用します。

これは言いましたが、私は、Quartz.NETが使用するスレッドプールの実装は、ジョブには十分なものだと言います。また、Quartz.NETは.NET 3.5に準拠しており、4.0の機能のみを使用することはできません。

もちろん、ソリューション内の2つを組み合わせることもできます。

+0

ありがとうございました。遅い無人バックグラウンドジョブを実行するためにスーパーターボチャージスレッドプールを必要としないかもしれないという私の感情を確認したと思います。 –

+0

2つの組み合わせで潜在的な落とし穴がありますか?例を挙げると、トリガーされたときにデータベースから作業を取得するジョブをスケジュールしたいと思います。この作業は、Parallel.ForEachで実行する50〜100個の個別作業です。これが爆発する条件はありますか? – avesse

+1

彼らは一緒にうまく協力する必要があります。通常のロギングと例外処理ルーチンを用意してください。あなたがProgram.csのメインがスローすると同じように思える、それは同じことです。再試行フラグをエラー時のコンテキストに設定するか、次回の実行を待つことを検討することをおすすめします。ジョブを偶発的にすることをお勧めします。 –

関連する問題