美文网首页
线程与CPU核绑定

线程与CPU核绑定

作者: FcxD | 来源:发表于2017-11-13 16:52 被阅读0次

    线程与CPU核绑定

    不管是线程还是进程,都是通过设置亲和性(affinity)来达到目的。对于进程的情况,一般是使用sched_setaffinity()来实现。
    与进程的情况相似,线程亲和性的设置和获取主要通过下面两个函数来实现:

    int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, const cpu_set_t *cpuset);
    int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, cpu_set_t *cpuset);
    

    cpu_set_t这个结构体类似于select中的fd_set,可以理解为cpu集,也是通过约定好的宏来进行清除、设置以及判断:

    void CPU_ZERO (cpu_set_t *set); //初始化,设为空
    void CPU_SET (int cpu, cpu_set_t *set); //将某个cpu加入cpu集中
    void CPU_CLR (int cpu, cpu_set_t *set); //将某个cpu从cpu集中移出
    int CPU_ISSET (int cpu, const cpu_set_t *set); //判断某个cpu是否已在cpu集中设置了
    

    cpu集可以认为是一个掩码,每个设置的位都对应一个可以合法调度的 cpu,而未设置的位则对应一个不可调度的 CPU。换而言之,线程都被绑定了,只能在那些对应位被设置了的处理器上运行。通常,掩码中的所有位都被置位了,也就是可以在所有的cpu中调度。

    相关文章

      网友评论

          本文标题:线程与CPU核绑定

          本文链接:https://www.haomeiwen.com/subject/rvizmxtx.html