Java 进程与线程的线程亲和性

标签 java c linux pthreads affinity

我最近编写了一些代码[1][2],尝试使用 JNA 调用 sched_setaffinity 来尝试将进程的亲和性设置为特定核心。函数sched_setaffinity的第一个参数是进程ID。

使用 pid 为 0(指进程本身)调用函数可以正常工作。但是,我希望能够基于线程 ID 而不是进程来设置亲和性。有什么办法可以做到这一点吗?

  1. https://github.com/eQu1NoX/JavaThreadAffinity/blob/master/src/com/threads/ctest.c
  2. https://github.com/eQu1NoX/JavaThreadAffinity/blob/master/src/com/threads/ThreadAffinity.java

最佳答案

有一个函数叫 pthread_setaffinity_np可以将线程thread的CPU亲和性掩码设置为cpuset指向的CPU集。

cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(core_id, &cpuset);

pthread_t current_thread = pthread_self();    
pthread_setaffinity_np(current_thread, sizeof(cpu_set_t), &cpuset);

这段代码可以将一个线程设置为核心(用core_id表示)。

据我所知,Java 线程并不总是与操作系统中的线程匹配。所以我不太确定这段 native 代码是否可以帮助你。

关于Java 进程与线程的线程亲和性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20030070/

相关文章:

c - 理解这些汇编指令

c++ - QT Creator - 在我自己的库中使用外部库

linux - 如何删除具有特定名称的所有子目录

java - 重用 Morphia 查询有没有好的模式?

Java反射,如何在运行时重新加载已更改和重新编译的类?

PHP exec 没有按预期运行我的脚本

c - VB6 - 使用 C/C++ dll 时出现运行时错误 48

java - 在 Java 二维数组中查找最小值和最大值

java - 如何将使用jxl.jar生成的excel文件从服务器发送到客户端

c - 使用脚本在文件中搜索整数(版本号)