我最近有机会听取有关JVM的另一个讨论。据说Java虚拟机在并发性方面做得很好。我找不到任何令人满意的答案,我认为这是一个简单的问题:当JVM运行多线程(因此使用多个虚拟核心,对吗?)它是否利用机器CPU的多个真实核心?
我听到“并不总是”或“有时”作为答案;那么有什么方法可以确保当我们设计代码来运行多个线程时,JVM也将使用CPU的多个内核?或者另一方面,是什么决定了JVM是否使用多核CPU核心?
我真的不能举一个例子说明什么时候这是必要的,但我发现它很有意思,因为我知道设计师喜欢在项目中确定一切。在一些大型应用程序中拥有多个线程的真正意义在于,如果实际上它们永远不会被平行计算?
答案 0 :(得分:8)
Java线程(如常规线程)可能被安排使用多个核心。关于并发编程的一个真正棘手的问题是,很难“强迫”程序使用X个核心并让这个线程在这个核心上运行,等等。换句话说,是确定性的。
最终取决于操作系统,在某种意义上说是硬件。但最终程序员应该抽象地考虑并发编程,并相信调度程序正在完成其工作。
换句话说,是的。
答案 1 :(得分:2)
在所有主流的现代jvms中,java线程都是“真正的”操作系统线程,因此将像任何其他操作系统线程一样跨核心进行调度。