6

私はウェブクローラーを実行しており、スレッドを使用してページをダウンロードしています。

プログラムのパフォーマンスを制限する最初の要因は帯域幅です。これ以上ページをダウンロードすることはできません。

2つ目は、私が興味を持ったことです。スレッドを使用して同時に多くのページをダウンロードしていますが、より多くのスレッドを作成すると、より多くのプロセッサが共有されます。スレッドの理想的な数を決定するためのテストのメトリック/方法/クラスはありますか、または特定の数の後、パフォーマンスが変化または低下しない場合は?

4

4 に答える 4

0

このスレッドで私の答えを見てください

スレッドの最適な量を見つける方法は?

あなたの例はおそらくCPUバウンドになるので、競合を解決して、ボックスで使用する適切な数のスレッドを解決し、それらをすべてビジー状態に保つことができる方法が必要です。プロファイリングはそこで役立ちますが、コアの数 (および前述のネットワーク遅延など) に依存することを覚えておいてください。そのため、スレッド プールのサイズを調整するときにランタイムを使用してコアの数を取得します。

残念ながら、テスト、測定、調整、繰り返しの要素が含まれます。

于 2011-05-20T15:31:06.540 に答える
0

マルチスレッドの並列 Web クローラーを開発しました。スループットのベンチマークは、野獣が自分の仕事をどのように処理するかについてのアイデアを得る最良の方法です。専用の Java サーバーの場合、コアごとに 1 つのスレッドが開始のベースとなり、その後 I/O が機能して変更されます。

特定の数のスレッドの後、パフォーマンスは低下します。ただし、クロールするサイトや使用する OS などにも依存します。最初のベンチマークを実行するときは、応答時間が一定のサイトを見つけるようにしてください (Google などですが、別のサービスを使用します)。

遅い Web サイトでは、スレッド数が多いほど I/O ブロッキングを補う傾向があります

于 2011-05-19T22:25:02.573 に答える
-2

Akka のようなものを使用してスレッドを管理すると言います。私が正しく覚えていれば、コールバックで動作する非ブロックIOでJersey http client libを使用してください。おそらく、そのタイプのタスクには理想的な設定です。

于 2011-05-20T01:19:40.713 に答える