Java线程亲和性

标签 java multithreading scheduling setthreadaffinitymask

有人知道如何将 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/

相关文章:

java - 在 Android 上使用 Jackson 库解析大型 JSON 时出现内存不足错误

JavaFx 将实体模型绑定(bind)到 TableView

c++ - static const char [] 在类线程安全吗?

c# - 完成任务时手动捕获和应用 SynchronizationContext

c# - 如何设置 Quartz.NET 以安排电子邮件

c# - Silverlight - 使用 JAVA 在运行时发送/接收数据

java - 有没有办法解密S/MIME公钥数据?

multithreading - Boost::thread() 和 Nvidia CUDA 是否存在某种不兼容?

linux - 尝试使用cgroup显示CPU分配更改

c - 为什么我的程序在 Ubuntu 上显示 Segmentation Fault 但在 Geeks IDE 上运行正常?