Javaでスレッドプールを実装したいと思います。これは、送信されたタスクの計算およびI/O動作に基づいて動的にサイズを変更できます。
実際には、C#4.0の新しいスレッドプールの実装と同じ動作を実現したいと思います。
すでに実装されていますか、それともほとんど既存の同時実行ユーティリティ(CachedThreadPoolなど)を使用してこの動作を実現できますか?
C#バージョンは、最適な使用率を実現するために自己計測を行います。Javaで利用できるセルフインストルメンテーションと、現在のパフォーマンスへの影響は何ですか?
タスクがその意図を示す協調的なアプローチを実行することは可能ですか(たとえば、I / O集中型の操作に入る、CPU集中型の操作フェーズに入る)?
どんな提案でも大歓迎です。
コメントに基づいて編集:
ターゲットシナリオは次のとおりです。
- ローカルファイルのクロールと処理
- Webクロール
- マルチWebサービスへのアクセスと集約
CachedThreadPoolの問題は、既存のすべてのスレッドがブロックされたときに新しいスレッドを開始することです。明示的な境界を設定する必要がありますが、それだけです。
たとえば、100個のWebサービスを連続してアクセスできます。100 CTPを作成すると、100スレッドが開始されて操作が実行され、大量の複数のI/O要求とデータ転送が確実にお互いにつまずきます。静的テストケースの場合、最適なプールサイズを実験して見つけることができますが、ある方法で適応的に決定して適用する必要があります。