码迷,mamicode.com
首页 > 其他好文 > 详细

给进程分配cpu核心

时间:2014-05-01 11:59:49      阅读:474      评论:0      收藏:0      [点我收藏+]

标签:class   code   strong   get   int   set   数据   name   res   amp   linux   

新负责的程序采用生产者和消费者的模式,生产者的速度非常快,数据几乎都在内存里,处理起来很快。而消费者要频繁的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);

给进程分配cpu核心,码迷,mamicode.com

给进程分配cpu核心

标签:class   code   strong   get   int   set   数据   name   res   amp   linux   

原文地址:http://www.cnblogs.com/yrpen/p/3701505.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!