9

数年前、Windows環境で、CPU計算集約型+メモリアクセス集約型+ I / Oアクセス集約型のアプリケーションの複数のインスタンスを実行することにより、いくつかのテストを行いました。私は2つのバージョンを開発しました。1つはマルチプロセッシングで実行され、もう1つはマルチスレッドで実行されます。

マルチプロセッシングの方がパフォーマンスがはるかに優れていることがわかりました。私はどこかで読んだ(しかし、私はその場所を思い出せない)。

その理由は、マルチスレッドでは、単一のメモリパイプラインとI / Oパイプラインを「争っている」ため、マルチプロセッシングに比べてパフォーマンスが低下するということです。

しかし、その記事はもう見つかりません。今日まで、以下がまだ当てはまるのだろうかと思っていました。

Windowsでは、アルゴリズムコードをマルチプロセッシングで実行すると、マルチスレッドよりもパフォーマンスが向上する可能性が高くなります。

4

3 に答える 3

6

それは、さまざまなスレッドまたはプロセス (私はそれらの両方に「タスク」という総称を使用します) が、特にメモリを共有することによって、どれだけ通信する必要があるかによって異なります。これは、スレッドにとっては簡単で、安価で高速ですが、プロセスなので、多くのことが起こっている場合、プロセスのパフォーマンスがスレッドに勝ることはないと思います。

また、プロセス (特に Windows の場合) は開始するのが「重い」ため、多くの「タスク開始」が発生すると、パフォーマンスの点でスレッドがプロセスを簡単に打ち負かす可能性があります。

次に、「ハイパースレッディング」を備えた CPU を使用できます。これは、コア上で (少なくとも) 2 つのスレッドを非常に高速に実行できますが、プロセスは実行できません (「ハイパースレッディング」スレッドは個別のアドレス空間を使用できないため)。どのスレッドがパフォーマンス的に勝つことができるか。

これらの考慮事項のいずれにも当てはまらない場合、いずれにせよ、レースは引き分けに過ぎないはずです。

于 2010-07-31T02:55:45.460 に答える
1

引用が何を意味するのかさえわかりません。それはナンセンスに非常に近いです。

インプロセス スレッドが共有する主なものは、仮想メモリ アドレス空間です。

于 2010-07-31T02:53:49.500 に答える
-2

これも真実だとわかりました。しかし、それはスケジューリングと関係があると思います。十分に長く実行すると、マルチプロセスはマルチスレッドと同じくらい高速になるためです。その数は約10秒です。アルゴリズムを 10 秒間実行する必要がある場合。マルチプロセスはマルチスレッドと同じくらい高速です。ただし、実行する必要があるのは 1 秒未満の場合です。マルチプロセスは、マルチスレッドよりもはるかに高速です。

于 2012-02-15T02:56:03.517 に答える