我最近编写了一些代码[1][2],尝试使用 JNA 调用 sched_setaffinity
来尝试将进程的亲和性设置为特定核心。函数sched_setaffinity
的第一个参数是进程ID。
使用 pid 为 0(指进程本身)调用函数可以正常工作。但是,我希望能够基于线程 ID 而不是进程来设置亲和性。有什么办法可以做到这一点吗?
最佳答案
有一个函数叫 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/