My Program は、それぞれが独立した作業を行う所定の数のスレッドを使用します。i7-2600 CPU を使用していますが、ハイパースレッド モジュールをシャットダウンして、4 コアで 4 スレッドを実行します。1 つのスレッドでプログラムを実行すると、CPU 使用率は 25% で、1 つのスレッドが完全に使用されているため完璧ですが、4 つまたは 3 つのスレッドを実行すると CPU が 60% しか使用されないのはなぜですか?
前に述べたように、スレッドは完全に独立しています (ロックも競合もありません) 1 つのスレッドでプログラムを 4 回実行すると、100% の CPU 使用率が得られます (つまり、プロセスごとに 1 つのスレッドの 4 つのプロセスが適切になる場合)。 CPU使用率)
何か案は?
いくつかの詳細情報:
- 必要なすべてのデータがメモリにロードされる処理中に I/O を使用していません。各スレッドは処理前に独自のデータをロードします。
- (oleDb を使用して) データベースからデータをロードしますが、説明している問題は、すべてのスレッドが処理されている (ロードが行われていない) ロード後に発生します。
- 数値は次のとおりです。
- 50 ではなく約 40% の 2 つのスレッド (スレッドごとに 85%)。
- 75 ではなく約 50% の 3 つのスレッド (スレッドごとに 65%)。
- 100 ではなく約 60% の 4 スレッド (スレッドごとに 60%)。
- i7 2600 と 16GB のメモリを使用していますが、そのプロセスのメモリ使用量はそれほど大きくありません。
- Windows パフォーマンス モニターを実行して、競合がないかどうかを調べました。