【问题标题】:Run Java Threads On One CPU在一个 CPU 上运行 Java 线程
【发布时间】:2012-12-20 09:55:45
【问题描述】:

我们在 JAVA 中有一个多线程应用程序,它有多个并行运行的线程。现在我们想在一个内核上运行所有这些线程。当前应用程序在具有多个核心的系统上运行。

我们知道 .Net Framework 中有一种可用的 ProcesAffinity 技术来设置进程关联性。

但我们不想依赖 .Net Framework,因为我们的应用程序是用 java 构建的。

我们是否使用 Bat 文件设置进程关联并通过 Bat 文件运行我们的应用程序可执行 jar 文件?

目前我们的应用程序在 Window XP 上运行。所以我们需要一个在 XP 平台上运行良好的解决方案。

【问题讨论】:

标签: java .net windows multithreading parallel-processing


【解决方案1】:

编辑:

有可能:见Java thread affinity


Pure Java 不支持在特定处理器上运行线程。检查上面链接的 SO 问题。

【讨论】:

  • @ThomasJungblut:谢谢。
  • 这允许您将关键线程限制/分配给特定核心或核心上的 cpu,但它不会重新分配 JVM 线程,例如。 GC 线程。
【解决方案2】:

就我个人而言,我认为不能在纯 Java 中设置这一事实并不是一件坏事,对我来说,应用程序的运行方式很大程度上取决于操作系统,因此需要一个特定于操作系统的解决方案不是坏事。

您可以使用MS psexec 实用程序来设置亲和力:

psexec -a 1 java -jar myapplication.jar

将指示所有由 java 创建的线程将在最低 CPU 上运行。

这一行将是您的 .BAT 文件...

【讨论】:

  • beny23 再次为 Psexec 我们需要 .net 框架来运行 psecxec.exe 文件
【解决方案3】:

你不能在纯 Java 中做到这一点。但在某些版本的 Windows 上,您可以通过操作系统实用程序来完成;请参阅https://superuser.com/questions/309617/how-to-limit-a-process-to-a-single-cpu-core ...,您可以通过 JNI 调用本机库来执行此操作。

【讨论】:

    猜你喜欢
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    相关资源
    最近更新 更多