c++ sched_setaffinity和getpriority

c++ sched_setaffinity和getpriority

sched_setaffinity

sched_setaffinity格式

sched_setaffinity(thread_id, sizeof(cpu_set), &cpu_set);
作用: 设置cpu亲和力

关于亲和力

亲和力是指在linux系统 中可以将一个或多个进程绑定到一个或多个处理器上面运行.
cpu亲和力的掩码决定了该进程可以在几号cpu上运行.

sched_setaffinity参数

cpu_zero: 清空一个集合
cpu_set_t: cpu亲和力的掩码使用此函数表示一个cpu的集合/
cpu_isset():检查一个cpu号是否在这个集合中.
cpu_set():将一个给定的cpu号加入到一个集合
cpu_clr():将一个给定的cpu号从一个集合中去掉.

代码举例:

参照mysql8.0源码:

bool bind_to_cpu(cpu_id_t cpu_id, my_thread_os_id_t thread_id) {
            DBUG_TRACE;// 调试
            cpu_set_t cpu_set; // cpu亲和力的掩码使用此函数表示一个cpu的集合

            CPU_ZERO(&cpu_set);//清空一个集合
            CPU_SET(cpu_id, &cpu_set); //将一个给定的cpu号加入到一个集合
            int rc = ::sched_setaffinity(thread_id, sizeof(cpu_set), &cpu_set);
            if (rc != 0) { //judge rc's result!
                char errbuf[MYSQL_ERRMSG_SIZE];
                LogErr(ERROR_LEVEL, ER_RES_GRP_SET_THR_AFFINITY_FAILED, thread_id, cpu_id,
                       my_errno(), my_strerror(errbuf, MYSQL_ERRMSG_SIZE, my_errno()));
                return true;
            }
            return false;
        }

在myql源码中sched_setaffinity(thread_id, sizeof(cpu_set), &cpu_set);
thread_id: 进程id
&cpu_set:获取到cpu的掩码,让thread_id在此cpu上运行.如果是0则表示当前进程.
sizeof(cpu_set): 是指进程运行在几号cpu的长度.如果当前cpu上没有运行指定的thread_id,则该指定进程会在其他cpu上迁移一个和&cpu_set指定的一个cpu上运行.

getpriority

getpriority(int which,int who): 用于返回进程,进程组,用户进程的优先级

  • which取值:
    1. prio_process: 0 进程
    2. prio_pgrp: 1 进程组
    3. prio_user: 2 用户进程
  • who取值:
    1. 当which取prio_process时,参数为0,返回当前进程的进程优先级
      参数不为0,则返回进程号为who的进程优先级
    2. 当which取prio_pgrp时,参数为0,返回当前进程组的进程优先级
      参数不为0,返回进程组号为who的进程优先级
    3. 当which取prio_user时,参数为0,返回当前用户进程的优先级
      参数不为0,返回当前用户进程号为who的进程优先级
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值