4

複数のコアが特定のプロセッサで使用可能な場合、JVMがユーザーによって書き込まれたJavaコードを実行すると自動的に利用されますか?または、マルチコアを利用するためにコードを具体的に記述する必要がありますか?Javaコードが複数のプロセッサコアを利用する場合、自動的に利用されます

私は、JVMが実行中に複数のコアを利用できるように、つまりユーザーコード内に複数のスレッドを作成するプログラマーを使ってコードを作成する必要がありますか? Javaコードでマルチスレッドを使用しないと、JVMは使用可能なコアの数に関係なく、複数のコアを利用することはできません。おそらくそうかもしれませんが、わかりません。

+2

*ユーザーコードに複数のスレッドを作成しているプログラマの場合は?*はい。 * Javaコードでマルチスレッドを使用しないと、コアの数にかかわらずJVMは複数のコアを利用することができません。 GCは別のスレッドを使用する可能性があります。またはEDT。他のハウスキーピングスレッドも実行されます。 –

答えて

2

私が知る限り、オプションが存在する場合、JVMは利点を生かせます。プロファイラツールjava/jdk [version] /bin/jvisualvm.exeを実行すると、通常の「シングルスレッド」プログラムでも複数のスレッドを使用する方法がわかります。私は、プロファイラが特定のスレッドにどのコアが使用されているかを表示しても、それはわかりません。

3

Javaでは、別のスレッドを作成することによって、マルチコアの利用を可能にすることができます。以前のJVMの実装とは異なり、最新の実装ではOSが認識できるネイティブスレッドが作成され、実行可能な各プロセッサを実行中のJavaプログラムで作成された各スレッドに割り当てることができます。 しかし、マルチプロセッシングの利点(マルチコアの利用率)は常に得られるというわけではありません。それは問題に依存し、さらにソリューションの設計方法にもよります。不適切に設計されたソリューションでは、マルチコア処理の利点はありません。

注:私の提案は、並列コンピューティング(マルチコアの使用率)アーキテクチャを念頭に置いて、高度に計算が集中するジョブを設計する必要があるということです。現代のCPUは、CPUクロック周波数を上げる最大限に達しています。したがって、インテルのような企業はマルチコアを持つCPUを設計しています。したがって、プロセッサのマルチコア能力を活用するためにソフトウェアを書くことは、開発者の責任です。

関連する問題