【问题标题】:Java processes vs. threads for thread affinityJava 进程与线程关联的线程
【发布时间】:2013-11-17 11:26:07
【问题描述】:

我最近编写了一些代码[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

【问题讨论】:

    标签: java c linux pthreads affinity


    【解决方案1】:

    有一个函数叫pthread_setaffinity_np,可以将线程线程的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 线程并不总是与操作系统中的线程匹配。所以我不太确定这段本机代码是否可以帮助你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 2020-05-13
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多