Java 线程关联
2022-08-31 14:49:49
有没有人知道一种方法将Java进程中的单个线程锁定到特定的CPU内核(在Linux上)?我已经在C中完成了此操作,但是找不到如何在Java中执行此操作。我的直觉是,这需要一个JNI电话,但我希望这里的某个人可能有一些见解,或者以前可能已经做过。
谢谢!
有没有人知道一种方法将Java进程中的单个线程锁定到特定的CPU内核(在Linux上)?我已经在C中完成了此操作,但是找不到如何在Java中执行此操作。我的直觉是,这需要一个JNI电话,但我希望这里的某个人可能有一些见解,或者以前可能已经做过。
谢谢!
你不能在纯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中使用线程相关性的库。它使用与前面提到的相同的方法,但具有另一个接口
我知道这已经有一段时间了,但如果有人遇到这个线程,这就是我解决这个问题的方法。我写了一个脚本来执行以下操作: