使用多少内核的决定权是否掌握在JVM手中?

假设我们有一个非常复杂的任务。我知道如果我们使用一个线程,那么实际上我们将使用一个内核,但是如果我将任务划分为与处理器内核数量相等的线程,程序是否一定会在所有内核上运行?或者使用的线程数和内核数与 JVM 的“决定”之间没有相关性?

回答

实际上,通常是操作系统决定 Java 应用程序使用多少个内核。本机线程到内核的调度由操作系统1处理。JVM 很少(如果有的话)说线程调度。

但是,是的,Java 应用程序不一定可以访问所有内核。这将取决于系统上的其他应用程序、服务等正在做什么。实际上,操作系统可以为管理员提供方法来从外部限制给定(Java 或非 Java)应用程序可以使用的内核数量,或者给予一个应用程序优先于另一个应用程序。


...或者线程数和使用的内核之间没有相关性

有一种相关性,但不是特别有用。JVM 不会(不能)使用比现有本地线程(包括 JVM 的内部线程和 GC 线程)更多的内核。

还值得注意的是,操作系统(通常)不会将内核分配给当前不可运行的本机线程。


Basil Bourque 在他的回答中指出,如果 Loom 项目被纳入标准版本,它将为 Java 中的线程带来重大改进。但是,Loom 不会改变在任何给定时间分配给应用程序 JVM 的物理内核数量由操作系统控制/限制的事实。


1 - 或操作系统的管理程序。例如,在云计算环境中事情可能会变得有点复杂。


以上是使用多少内核的决定权是否掌握在JVM手中?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>