1

コンピューティングをあまり行わない 2 つの IO 集約型プロセスがあります。1 つは Web ページを取得して解析し、もう 1 つは解析で取得したデータをデータベースに保存しています。これは、ウェブのクロールが続く間繰り返されます。

システム全体が実行されているマシンのパフォーマンスが最適になるように、各タスクで動作しているスレッドの数を動的に増減する方法はありますか? この方法は、事前にアクセスできない多数のマシンに配布されるため、ベンチマークを使用しないでください。

いくつかの情報源または情報を教えてください。

4

2 に答える 2

2

スレッドを直接使用する代わりに、実際の作業を行うThreadPool多数の を追加する を作成する必要があります。Runnableあなたの説明から、CachedThreadPoolが適切かもしれません。実装方法のガイドラインについては、http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.htmlを参照してください。

于 2013-05-17T17:00:43.647 に答える
1

スレッド数を動的に調整しても問題ありません (たとえば、 ThreadPoolExecutorを使用)。

しかし、最適なスレッド数は次の 2 つの要因によって制限されるように見えます。

  1. 「ダウンロード スレッド」のネットワーク帯域幅
  2. 「データベース スレッド」で許可されるデータベース接続の最大数

ページが本当に小さい場合を除き、各スレッドは他のスレッドから帯域幅を盗むだけなので、ダウンロード部分をマルチスレッド化する必要があるかどうかはわかりません。

于 2013-05-17T16:52:17.350 に答える