2

最近、私は興味深い現象を観察しており、それに基づいてソフトウェア アーキテクチャ全体を再設計する前に、なぜこのようなことが起こるのか、またスレッドのパフォーマンスをプロセスのパフォーマンスと同等にすることが可能かどうかを知りたいと考えています。

通常、タスクは特定のデータをダウンロードすることです。Parallel ライブラリに基づいて、6 つのスレッドで 1 つのプロセスを作成すると、ダウンロードに約 10 秒かかります。

ただし、それぞれがシングル スレッドである 6 つのプロセスを作成し、同じデータをダウンロードすると、全体で約 6 秒しかかかりません。

数値は徹底的に検証されており、統計的に有意であるため、当然のことと考えてください。

観察結果は大規模な (数百回の試行) データセットで保持されており、この動作からの逸脱は見られませんでした。

基本的に、問題は、同期していないマルチスレッド プロセスが、まったく同じ動作コードを持ついくつかの個別のプロセスよりも遅い理由と、それをどのように修正できるかということです。

前もって感謝します!

注: 同様の質問を読みましたが、回答は満足のいくものではなく、実用的ではありませんでした。

4

1 に答える 1

1

私の推測は svick のものと同じです。おそらく、ランタイムによって何らかのボトルネックが挿入されているのでしょう。

一般に、Fiddler や Wireshark などのツールを使用して、10 件のダウンロードがどのようにインターリーブされているかを確認できます。あなたの場合、一度にアクティブなのは2つだけであり、1つが終了するとすぐに別のものが開始されると予想されます.

設定を変更する前に、なぜそこにあるのかを理解する必要があります。サーバーを圧倒しないように、推奨されるクライアントの動作として HTTP 仕様に記述されています。コードを数百、数千、数百万台のマシンに配布する場合は、クライアントごとに 10 回の同時ダウンロードの影響を考慮する必要があります。

于 2012-06-03T13:57:42.667 に答える