1

Thread クラスと Runnable インターフェイスを使用して、オブジェクト指向の観点からスレッド化について十分に理解していると思います。私のアプリケーションの 1 つに「ダウンロード」ボタンがあり、VB.NET アプリケーションを使い続けながら、約 30 分かかるタスクをバックグラウンドで実行できます。

ただし、スレッディングがコンピューターの物理アーキテクチャにどのように対応するかはわかりません。クアッドコア プロセッサを搭載した PC で実行するシングル スレッド アプリケーションがある場合、.net プログラムは 4 つのプロセッサすべてを使用しますか?

クアッドコア プロセッサ上にマルチスレッド アプリケーション (たとえば 4 つのスレッド) がある場合、各スレッドは異なるコアで実行されますか?

開発者としてこれを制御できますか?

大学で読んだ「オペレーティング システムの概念」という本を参考にしましたが、具体的な答えは見つかりませんでした。

4

2 に答える 2

1

クアッドコア プロセッサを搭載した PC で実行するシングル スレッド アプリケーションがある場合、.net プログラムは 4 つのプロセッサすべてを使用しますか?

いいえ、できません。少なくとも同時にはできません。ただし、理論的には、オペレーティング システムのスケジューラが最初にスレッドを 1 つのプロセッサで実行し、後で別のプロセッサに移動する可能性があります。このようなスケジューラは、存在する物理プロセッサよりも多くのアプリケーション/スレッドを同時に実行できるようにするために必要です。スレッドの実行は小さな断片にスライスされ、次々にプロセッサに供給されます。各スレッドには、CPU の使用が別のスレッドに切り替わる前に計算できるタイム スライスが割り当てられます。

開発者としてこれを制御できますか?

直接ではありません。制御できるの、スレッドの優先順位をタスク スケジューラにとってより重要にすることです。

より一般的な注意として、ユースケースではスレッドを使用しないでください– 少なくとも直接的には使用しないでください。スレッドは、実際にはかなり低レベルのプリミティブです。BackgroundWorker特定のユースケースでは、スレッド管理の低レベルの詳細の多くを抽象化すると呼ばれるコンポーネントがあります。

クアッドコア プロセッサ上にマルチスレッド アプリケーション (たとえば 4 つのスレッド) がある場合、各スレッドは異なるコアで実行されますか?

必ずしも; 繰り返しになりますが、アプリケーションは、そのスレッドがどの程度正確に実行されるかをほとんど制御できません。ただし、オペレーティング システムは、スレッドを「賢く」スケジュールするのに非常に苦労します。これは、実際には、アプリケーションに複数のビジー スレッドがある場合、使用可能なコア全体にできるだけ均等に分散されることを意味します。特に、コアより多くのスレッドがない場合、各スレッドは独自のコアを取得します。

于 2013-02-16T18:40:57.880 に答える
0

通常、物理アーキテクチャへのマッピングについて心配する必要はありません。.NET と OS は、アプリケーションの効率を最大化するために最善を尽くします。シングルスレッドのコンピューターでは遅くなるという犠牲を払っても、マルチスレッドにするだけです。ただし、スレッドの最大数 (アプリが理論的に無限にスケーリングする場合)、コア数、またはその 2 倍に制限することができます。ケースごとにパフォーマンスをテストし、最適な最大値を決定します。

コア # を設定すると、アプリのパフォーマンスがさらに低下することがあります。たとえば、コア #1 が現在 PC のウイルスをスキャンしており、アンチウイルスがシングル スレッドであるとします。上記のシナリオでは、クアッドコア PC を想定して、4 スレッド アプリをコアごとに 1 つずつ実行する必要はありません。

そうは言っても、特定のコアでスレッドを実行したい場合は可能です-これを参照してください:

これもチェックしてください:

于 2013-02-17T18:18:47.703 に答える