1

最近、JVM に関する別のディスカッションを聞く機会がありました。Java Virtual Machine は、並行性の点でうまく構築されていると述べられています。JVM が複数のスレッドを実行する (したがって、複数の仮想コアを使用する) 場合、マシンの CPU の複数の実際のコアを使用しますか?

答えとして「いつもではない」または「時々」と聞きました。複数のスレッドを実行するようにコードを設計するときに、JVM が CPU の複数のコアも使用するようにする方法はありますか? あるいは、JVM が複数の CPU コアを使用するかどうかを決定するものは何ですか?

これが必要になる例を実際に示すことはできませんが、プロジェクトですべてを決定論的にすることを好む設計者を知っているので、興味深いと思います。また、実際に複数のスレッドが並列に計算されない場合、大規模なアプリケーションで複数のスレッドを使用する意味は何なのでしょうか?

4

2 に答える 2

8

Java スレッドは、通常のスレッドと同様に、複数のコアを使用するようにスケジュールできます並行プログラミングの本当の難点は、プログラムに X 個のコアを使用させたり、このスレッドをこのコアで実行させたりすることを「強制」するのが難しいことです。つまり、決定論的です。

それは最終的には OS 次第であり、ある意味ではハードウェア次第です。しかし、結局のところ、プログラマーは並行プログラミングについて抽象的に考え、スケジューラーがその仕事をしていると信じるべきです。

言い換えれば、はい。

于 2013-10-01T00:27:27.760 に答える
2

すべての主流の最新の jvm では、Java スレッドは「実際の」オペレーティング システム スレッドであるため、他の OS スレッドと同様にコア間でスケジュールされます。

于 2013-10-01T00:22:01.487 に答える