12

マルチスレッドがパフォーマンスを向上させる方法について、誰もが話しているのを耳にします。何かが欠けていない限り、私はこれを信じません。100 個の要素の配列があり、トラバースする場合、6 秒かかります。作業を 2 つのスレッドに分割すると、プロセッサは同じ量の作業を実行する必要があり、したがって時間もかかります。ただし、同時に作業しているが速度は半分です。マルチスレッドでさらに遅くするべきではありませんか?仕事を分割するための追加の指示が必要ですか?

4

2 に答える 2

19

マルチスレッドで 100 個の要素を反復する単純なタスクの場合、パフォーマンス上の利点はありません。

1,000 億を超える要素を繰り返し処理し、各要素に対して処理を行う場合、追加の CPU を使用すると処理時間を短縮できる可能性があります。また、より複雑なタスクでは、I/O などによる割り込みが発生する可能性があります。1 つのスレッドがスリープ状態でペリフェラルが I/O を完了するのを待っているとき (ディスクへの書き込みやキーボードからのキー押下など)、他のスレッドは作業を続行できます。

于 2013-03-08T11:18:07.610 に答える
6

プロセッサに複数のコアがある CPU バウンド タスクの場合、各プロセッサ コアで作業を分割できます。コアが 2 つある場合は、作業を 2 つのスレッドに分割します。このようにして、スレッドを全速力で動作させる必要があります。ただし、スレッドの作成には非常にコストがかかるため、スレッド作成の初期コストを克服するにはかなりのワークロードが必要です。

スレッドを使用して、対話型アプリケーションでの表示パフォーマンス (または応答性) を向上させることもできます。UI の操作をブロックしないように、バックグラウンド スレッドで大量の計算を実行します。計算が速く完了するわけではありませんが、アプリケーションには、遅くて応答しないように見える「ハング」はありません。

于 2013-03-08T13:02:22.197 に答える