线程与CPU核绑定

线程与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中调度。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概念 什么是CPU Affinity?Affinity是进程的一个属性,这个属性指明了进程调度器能够把这个进程调度...
    梅_梅阅读 5,179评论 3 4
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 9,631评论 0 23
  • Linux 内核SMP负载均衡浅析 需求在《linux进程调度浅析》一文中提到,在SMP(对称多处理器)环境下,每...
    meng_philip123阅读 5,889评论 0 3
  • Linux 进程管理与程序开发 进程是Linux事务管理的基本单元,所有的进程均拥有自己独立的处理环境和系统资源,...
    JamesPeng阅读 7,200评论 1 14
  • 又做了一些体验感不太好的梦, 做到最后还湿了眼眶, 想起一件小事, 原来有一个关系还不错的,朋友。 说是关系不错,...
    土豆三三阅读 3,541评论 0 0