Javaにスレッドプールを実装したいと思います。スレッドプールは、送信されたタスクの計算と入出力の動作に基づいて動的にサイズ変更できます。Javaでの適応スレッドプールの設計上の考慮
は実際に、私はC#でnew Thread Pool implementationと同じ動作を達成したい4.0
実装は既にありますか私は、主に既存の並行処理ユーティリティ(例えばCachedThreadPool)を使用してこの動作を達成することができますか?
C#バージョンは、最適な利用を実現するための自己計測を行います。どのような自己計器がJavaで利用可能であり、現在どのようなパフォーマンスの影響がありますか?
タスクが意図を伝える(例:I/O集中型の操作を入力し、CPU集中型の操作フェーズに入る)協調的アプローチを実行することは可能でしょうか?
ご提案は大歓迎です。コメントに基づいて
編集:
対象のシナリオが考えられます
- ローカルファイルが をクロールし、処理
- ウェブ
キャッシュの問題dThreadPoolは、既存のスレッドがすべてブロックされたときに新しいスレッドを開始するということです。明示的な境界を設定する必要がありますが、それだけです。
たとえば、私は100のWebサービスを連続してアクセスします。 100のCTPを作成すると、操作を実行するために100のスレッドが開始され、複数のI/O要求とデータ転送のトン数は確実にそれぞれの足でつまずくでしょう。静的なテストケースの場合、私は実験して最適なプールサイズを見つけることができますが、それを適応的に決定し、ある方法で適用したいと考えています。
縮小するスレッドプールからどのようなメリットが得られるのかよくわかりません。何もしないスレッドのコストは事実上何もありません(おそらく、スレッドローカルキャッシュからの最大の影響です)。 –
CachedThreadPoolのスレッドタイムアウトオプションと同じ利点があります。 – akarnokd
キャッシュされたスレッドプールのようですか?デフォルトのアイドルタイムアウトは1分ですが、それを変更できます。 –