0

たとえば、デュアル コア プロセッサを使用し、スレッドを使用せずに Java プログラムを作成するとします。プログラムの実行シーケンシャルで、デュアルの中でシングルコアのみを使用するということですか?


たとえば、デュアル コア プロセッサを使用し、スレッドと同期を使用して Java プログラムを作成する とします。プログラムの実行並列であり、利用可能なすべてのコア(この場合は 2 つのコア) を使用するということですか?

私の推論が完全に間違っている場合、スレッド化、コア、および並列処理の関係は何ですか?

4

1 に答える 1

2

まず、JVMには、ユーザーコードが別のスレッドをフォークしない場合でも、複数のCPUとコアを使用するバックグラウンドスレッドがいくつかあります。たとえば、ガベージコレクターは、ユーザーコードに関係なく、可能であれば別のCPUで同時に実行されます。

ユーザーコードが別のスレッドをフォークしない場合、JVMは複数のCPUでコードを同時に実行することはありません。複数のスレッドでプログラムを作成する場合、複数のCPUで実行される保証はありませんが、確実に実行される可能性が高くなります。これは、OSで他に何が実行されているか、およびスレッドがどの程度ブロックされているかに大きく依存します。スレッドが多くのCPUサイクルを消費していて、最新のOSで任意の時間実行している場合は、そうです。プログラムは両方のCPUを使用します。

Linux OS(および他のUnixen)でこれを確認するには、プロセスが一度に100%を超えるCPUを消費するかどうかを確認します。psオプションを使用して、基になるスレッドとそのCPU使用率を表示することもできます。ここで私の答えを参照してください:マルチプロセッサマシンでのposixスレッドの同時実行

于 2012-11-07T05:11:09.187 に答える