有人知道如何将 Java 进程中的各个线程锁定到特定的 CPU 核心(在 Linux 上)吗?我已经用 C 语言完成了此操作,但找不到如何在 Java 中执行此操作。我的直觉是这需要 JNI 调用,但我希望这里有人可能有一些见解或者以前可能已经做过。
谢谢!
最佳答案
你不能用纯java来做到这一点。但如果您确实需要它——您可以使用 JNI 调用完成这项工作的 native 代码。这是开始的地方:
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:还有另一个library用于在 java 中处理线程亲和性。它使用与前面提到的相同的方法,但有另一个接口(interface)
关于Java线程亲和性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21206962/