有人知道将 Java 进程中的单个线程锁定到特定 CPU 内核(在 Linux 上)的方法吗?我在 C 中完成了此操作,但找不到如何在 Java 中执行此操作。我的直觉是这将需要一个 JNI 调用,但我希望这里的人可能有一些见解或者可能以前做过。
谢谢!
原文由 Dave 发布,翻译遵循 CC BY-SA 4.0 许可协议
有人知道将 Java 进程中的单个线程锁定到特定 CPU 内核(在 Linux 上)的方法吗?我在 C 中完成了此操作,但找不到如何在 Java 中执行此操作。我的直觉是这将需要一个 JNI 调用,但我希望这里的人可能有一些见解或者可能以前做过。
谢谢!
原文由 Dave 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
你不能在纯 java 中做到这一点。但是如果您真的需要它——您可以使用 JNI 调用完成这项工作的本机代码。这是开始的地方:
http://ovatman.blogspot.com/2010/02/using-java-jni-to-set-thread-affinity.html
http://blog.toadhead.net/index.php/2011/01/22/cputhread-affinity-in-java/
UPD: 经过一番思考,我决定为此创建自己的类: ThreadAffinity.java 它是基于 JNA 的,而且非常简单——所以,如果你想在生产中使用它,也许你应该花一些时间制作它更稳定,但对于基准测试和测试来说,它工作得很好。
UPD 2: 还有另一个 库 用于在 Java 中处理线程关联。它使用与前面提到的相同的方法,但有另一个接口