gpt4 book ai didi

java - 如何告诉 JRE 使用多个 CPU 节点

转载 作者:行者123 更新时间:2023-11-30 08:46:52 25 4
gpt4 key购买 nike

我有一个要在 super 计算机上运行的 .jar 文件。有大约 40 个 CPU 节点可用,但 Java 在运行我的程序时只使用其中一个。有什么方法可以告诉 Java 使用所有可用的节点来运行给定的程序(最好不重新编译程序)?

最佳答案

默认情况下,Java 总是使用所有可用的 CPU。默认情况下,当您启动时,它会为每个逻辑 CPU 创建一个线程,仅用于执行 GC。

There are some 40 CPU nodes available but Java uses only one of them when running my program

问题是您的程序只使用了一个线程,因为您就是这样编写程序的。如果您希望您的程序使用更多 CPU,则必须在程序中执行更多独立任务,以便它可以使用更多 CPU。

Is there any way to tell Java to use all the available nodes to run a given program

是的,但您必须在您的代码中这样做,否则它不会神奇地使用比您的程序告诉它更多的 CPU。

JRE's fault I guess.

要么是 20 年前发布的 JRE 存在一个导致多线程停止工作的错误,并且当时没有人修复它,尽管大约有 1000 万开发人员使用它,要么是您刚刚编写的程序只有一个人使用有一个错误。哪一个听起来更有可能有错误?

如果你想看到你可以使用你机器上的所有 CPU。

public class Main {
public static void main(String[] args) {
IntStream.range(0, 1000).parallel().forEach(i -> {
long end = System.currentTimeMillis() + 1000;
while (end > System.currentTimeMillis()) {
// busy wait
}
System.out.println("task " + i + " finished");
});
}
}

这将使用您机器上的所有逻辑 CPU,无需任何特殊选项。

我看到 Java 在生产环境中运行在具有 120 个 CPU 和 3 TB 主内存的服务器上运行良好。当您的 Java 程序使用多个 NUMA 区域时,您会遇到一些问题,但我怀疑这是您的问题。

关于java - 如何告诉 JRE 使用多个 CPU 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32718399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com