zoukankan      html  css  js  c++  java
  • 给进程分配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);

  • 相关阅读:
    Oracle 常用的单行函数
    mysql练习02
    mysql练习
    Linux命令
    JSS
    CSS
    Html标签
    需求文档
    Oracle 常用的单行函数
    RHEL7最小化安装之后(桥接模式),查看本机IP,
  • 原文地址:https://www.cnblogs.com/yrpen/p/3701505.html
Copyright © 2011-2022 走看看