首页 > 系统相关 >利用Linux系统提供的和调度器相关的接口让进程或线程对某个处理器进行绑定

利用Linux系统提供的和调度器相关的接口让进程或线程对某个处理器进行绑定

时间:2024-06-01 23:22:15浏览次数:43  
标签:Linux 亲和性 绑定 线程 setaffinity 进程 CPU

目录

设置进程与CPU的亲和性

taskset命令允许你查看或设置运行中的进程的CPU亲和性(即该进程可以在哪些CPU上运行)。

要将一个已经运行的进程(例如PID为1234的进程)绑定到CPU 0和CPU 1上,你可以使用:

taskset -cp 0,1 1234

如果你正在启动一个新进程并希望它绑定到特定的CPU,你可以使用taskset与&来在后台运行该进程:

taskset -c 0 ./your_program &

设置线程与CPU的亲和性

在编程中,你可以使用sched_setaffinity系统调用来设置线程的CPU亲和性。这通常在多线程应用程序中使用,以控制线程在哪个CPU上运行。

以下是一个简单的C语言示例,展示如何使用sched_setaffinity来将当前线程绑定到CPU 0:

点击查看代码
#define _GNU_SOURCE  
#include <stdio.h>  
#include <stdlib.h>  
#include <sched.h>  
#include <string.h>  
#include <unistd.h>  
  
int main(void) {  
    cpu_set_t cpuset;  
    CPU_ZERO(&cpuset);  
    CPU_SET(0, &cpuset);  
  
    if (sched_setaffinity(0, sizeof(cpu_set_t), &cpuset) == -1) {  
        perror("sched_setaffinity");  
        exit(EXIT_FAILURE);  
    }  
  
    // 在这里执行你的代码...  
  
    return 0;  
}
注意:在这个例子中,我们使用了0作为sched_setaffinity的第一个参数,它代表当前线程(主线程)。如果你想要设置其他线程的CPU亲和性,你需要使用pthread_setaffinity_np函数(如果你在使用POSIX线程库)。

编译并运行这个程序将把当前线程绑定到CPU 0上。你可以通过修改CPU_SET的参数来更改绑定的CPU。

标签:Linux,亲和性,绑定,线程,setaffinity,进程,CPU
From: https://www.cnblogs.com/bell-c/p/18226546

相关文章

  • Linux编译——基于oebuild编译openEuler系统——新手向
    环境:Ubuntu20.04(镜像来自清华源)、已换源(来自清华源)、python3.8.10、pip3、Docker、oebuild。除此之外,只安装了Makefile、vim、net-tools、openssh-server、open-vm-tools、open-vm-tools-desktop,比较纯净的镜像。细则:Oebuildversion:v0.0.45.16Python3.8.10Dockerversi......
  • C++多线程原理详解
    学习C++多线程时,我有如下疑问:mutex的lock和unlock做了什么?mutex、lock_guard、unique_lock,它们之间的关系是什么?condition_variable中的wait做了什么?带着这些疑问,我查阅了一些资料,整理出本文。文章目录一、mutex二、lock_guard三、unique_lock四、condition......
  • 嵌入式Linux shell编程实例
    1.输入两个数,实现两个数的相加(1)具体实现代码如下1#!/bin/bash2reada3readb4sum=$(($a+$b))5echo"$sum"(2)编辑完内容后按Esc键再输入:wq保存,回车退出,执行结果如下图;(3)上图示例为输入两个数,实现两个数相加和,输出结果。2.计算1~100的和(1)具体实现代码......
  • 嵌入式Linux命令基础
    一、命令概述1.命令本质 命令的特性:一般就是对应shell命令,每一个命令代表一个可执行程序,运行一个命令就相当于运行一个可执行代码。2.打开终端方法第一种方法:通过鼠标右键选择打开终端第二种方法:利用Ctrl+Alt+T快捷键的方式3.普通用户/超级用户切换方法(1)普通用户......
  • 给Linux的虚拟机设置别名,同事设置免密登录
    我这里有四台虚拟机:192.168.75.147192.168.75.148192.168.75.149192.168.75.150分别修改对应的/etc/hosts文件,每个文件中都添加上以下内容192.168.75.147node1192.168.75.148node2192.168.75.149node3192.168.75.150node4免密登录配置:要在Linux系统中实现多台服务器之间......
  • Linux上的redis的安装和配置
    上传redis压缩包到linux上解压文件命令: tar-zxvfredis-6.2.4.tar.gz 进入解压好的redis文件编译make安装到指定目录makeinstallPREFIX=/usr/local/redis从解压文件中复制配置文件到reids中cp/root/redis-6.2.4/redis.conf/usr/local/redis/bin/修改配置文件re......
  • Linux体系结构
    Linux的体系结构源自于Unix,主要分为三层,从内到外依次是:内核-->系统调用–>应用层。内核(kernel)负责两个功能:管理计算机硬件资源;为上层应用程序提供运行环境。系统调用(systemcalls):内核给上层应用程序提供的接口。库函数(libraryroutines):通常我们会把系统调......
  • Linux上安装MySQL
    1).准备工作在安装MySQL数据库之前,我们需要先检查一下当前Linux系统中,是否安装的有MySQL的相关服务(很多linux安装完毕之后,自带了低版本的mysql的依赖包),如果有,先需要卸载掉,然后再进行安装。A.通过rpm相关指令,来查询当前系统中是否存在已安装的mysql软件包,执行指令如下:rpm-qa......
  • Linux-shell自动化编程
    1.常用命令解释器Shell命令解释器:bash编程. 编程环境准备 2.shell脚本执行方式 3.变量变量名字命名要求:1.不能以数字开头。2.不能以特殊符号开头,可以以"_"开头。3.推荐字母开头变量的命名方式:1.驼峰方式:personOfNamepersonOfAge2.✔现代式:单词(小......
  • Linux线程之读写锁小结
    读写锁(rwlock)与互斥锁(MutexLock)相比,有如下特点:更加细致的区分了读和写,给共享资源分别上了“读”锁和“写”锁。“写”独占,“读”共享,“写”锁优先级更高如果共享资源在绝大多数情况下是“读”操作,可以提高程序的并发性能。常用的函数原型总结如下:pthread_rwlock_trwlock......