首页 > 代码库 > 给进程分配cpu核心
给进程分配cpu核心
新负责的程序采用生产者和消费者的模式,生产者的速度非常快,数据几乎都在内存里,处理起来很快。而消费者要频繁的I/O。所以打算给生产者和消费者分配不一样的核心。
生产者只需要一个核心就够了,其余分配给消费者。
查了下这方面的资料,shell端有taskset命令可用。
taskset:
-p 正在运行的进程pid
-c 列表形式显示指定cpu
-v version
-h help
用法:i.e.
# taskset -cp 1,2,3 4321
# taskset -c 1,2,3-5 /usr/bin/XXX
linux提供了两个函数
sched_set_affinity()
(用来修改位掩码)sched_get_affinity()
(用来查看当前的位掩码)
cpu_affinity
会被传递给子线程,因此应该适当地调用 sched_set_affinity
每个核心对应一位掩码,相应位设为1
为每个线程设置 CPU 亲和性(affinity)
cpu_set_t mask; /* CPU_ZERO initializes all the bits in the mask to zero. */ CPU_ZERO( &mask ); /* CPU_SET sets only the bit corresponding to cpu. */ CPU_SET( created_thread, &mask ); /* sched_setaffinity returns 0 in success */ if( sched_setaffinity( 0, sizeof(mask), &mask ) == -1 ) { printf("WARNING: Could not set CPU Affinity, continuing...\n"); }
获取系统处理器数量
int NUM_PROCS = sysconf(_SC_NPROCESSORS_CONF);
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。