1

我最近有机会听了另一个关于 JVM 的讨论。据说Java虚拟机在并发方面构建得很好。对于我认为是一个简单的问题,我找不到任何令人满意的答案:当 JVM 运行多线程(因此使用多个虚拟内核,对吗?)时,它是否使用了机器 CPU 的多个真实内核?

我听到“不总是”或“有时”作为答案;那么有什么方法可以确保当我们设计代码以运行多个线程时,JVM 也将使用 CPU 的多个内核?或者反过来说,是什么决定了 JVM 是否使用多个 CPU 内核?

我真的无法举例说明何时需要这样做,但我觉得这很有趣,因为我知道设计师喜欢在他们的项目中确定一切。如果实际上它们永远不会被并行计算,那么在某些大型应用程序中拥有多个线程的真正意义是什么?

4

2 回答 2

8

Java 线程与常规线程一样,可能会被调度为使用多个内核。并发编程的真正棘手之处在于,很难“强制”一个程序使用 X 个内核并让这个线程在这个内核上运行,等等。换句话说,是确定性的。

这最终取决于操作系统,在某种意义上也取决于硬件。但归根结底,程序员应该抽象地考虑并发编程,并相信调度程序正在完成它的工作。

换句话说,是的。

于 2013-10-01T00:27:27.760 回答
2

在所有主流的现代 jvm 中,java 线程是“真正的”操作系统线程,因此将像任何其他操作系统线程一样跨内核调度。

于 2013-10-01T00:22:01.487 回答