大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > C技巧 > C语言给进程分配cpu核心

C语言给进程分配cpu核心

关键词:进程分配cpu核心C语言  阅读(618) 赞(15)

[摘要]本文是对给进程分配cpu核心的讲解,对学习C编程技术有所帮助,与大家分享。

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



相关评论