1

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

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

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

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

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

4

3 回答 3

4

编辑:

有可能:请参阅Java 线程亲和性


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

于 2012-12-20T09:59:38.073 回答
1

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

您可以使用MS psexec实用程序来设置关联:

psexec -a 1 java -jar myapplication.jar

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

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

于 2012-12-20T10:10:44.733 回答
0

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

于 2012-12-20T10:03:01.250 回答