Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux)

news2025/8/2 9:43:05
头图

Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux)

文章目录

  • Qt 设置CPU亲缘性,把进程和线程绑定到CPU核心上(Linux)
    • 摘要
    • 1 什么是CPU亲缘性
    • 2 目的
    • 3 API 介绍
      • 3.1 进程绑定到CPU
      • 3.2 线程绑定到CPU
    • 4 实际操作
      • 4.1 实操代码
        • 主进程
        • 串口线程
        • USB线程
      • 程序运行资源管理器截图
        • 虚拟机测试
        • 板子测试

关键字: CPUQtLinux线程进程

内容背景:

最近项目终于切到Linux下开发了,所以最近的记录都是发生在Debian 10 以及Arm Debain 10 下,Qt版本5.12.3。这几天真是问题多多,收获满满,不过目前阶段仅仅停留在解决问题,至于原理性的东西,还得慢慢消化。最近好多问题都是直接群里问大神,感谢各位大神助我成长。

摘要

哎呀,说多了都是泪,一直以为Arm Linux 天下无敌,谁知道性能还是没法和PC比,不过也是,毕竟功耗在那摆着呢。这不,最近遇到了一个问题,就是使用QCustomPlot绘制曲线的时候,在一屏200个点的时候没有问题,但是当我绘制 8K×5×2个点的时候,就卡的要死要死的,虽然加入了线程,但是还是未解决,所以就想到了这个,设置CPU亲缘性,但是每个平台的设置方式还不一样,所以今天的这个是在Linux下的,具体是在Debian 10 Qt 5.12.3 下测试。

1 什么是CPU亲缘性

这里我也就只能是现学现卖;

亲缘性的作用就是把线程or进程与CPU做黏合,也就是说,做了亲缘性的线程或进程,只会在这一个CPU核上运行,只在这一个CPU核上被调度,且不会切换到其他的CPU核上运行。这就是亲缘性。

以上引用来之:https://blog.csdn.net/qq_42956653/article/details/126160543

2 目的

为了让程序拥有更好的性能,有时候需要将进程或线程绑定到特定的CPU,这样可以减少调度的开销和保护关键进程或线程

以上应用来之:https://blog.csdn.net/tbadolph/article/details/101363120?spm=1001.2014.3001.5506

3 API 介绍

本节一下内容来之:https://blog.csdn.net/tbadolph/article/details/101363120?spm=1001.2014.3001.5506

3.1 进程绑定到CPU

Linux提供一个接口,可以将进程绑定到特定的CPU:

#include <sched.h>

int sched_setaffinity(pid_t pid, size_t cpusetsize, const cpu_set_t *mask);

int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);

参数

pid:进程的id号,如果pid为0,则表示本进程

cpusetsize:mask的大小

mask:运行进程的CPU,可以通过以下函数操作mask

#define CPU_SET(cpu, cpusetp) //设置cpu

#define CPU_CLR(cpu, cpusetp) //删除cpu

#define CPU_ISSET(cpu, cpusetp) //判断cpu

#define CPU_ZERO(cpusetp) //初始化为0

3.2 线程绑定到CPU

不仅仅进程可以绑定到CPU,线程也可以。Linux提供一个接口,可以将线程绑定到特定的CPU:

#include <pthread.h>

int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, const cpu_set_t *cpuset);

int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, cpu_set_t *cpuset);

该接口与进程绑定到CPU的接口的使用方法基本一致。当进程绑定到特定的CPU之后,线程还是可以绑定到其他的CPU的,没有冲突。

4 实际操作

在我的项目里面,暂时有主进程,串口数据处理线程和USB数据处理线程,如下图所示,我将主进程绑定到了CPU:0上,将串口线程绑定到了CPU:1上,将USB数据处理线程绑定到了 CPU:2 上。

image-20220907144743221

4.1 实操代码

主进程

    cpu_set_t mask;
    CPU_ZERO(&mask);
    CPU_SET(0,&mask);
    if(sched_setaffinity(0,sizeof(cpu_set_t),&mask) < 0)
        qDebug() << "False:" << "sched_setaffinity(0,sizeof(cpu_set_t),&mask)";

串口线程

    cpu_set_t mask;
    CPU_ZERO(&mask);
    CPU_SET(1,&mask);
    if(pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0)
        qDebug() << "False:" << "pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask)" << LOGINFOR;

USB线程

        cpu_set_t mask;
        CPU_ZERO(&mask);
        CPU_SET(2,&mask);
       if(pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) < 0)
           qDebug() << "False:" << "pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask)" << LOGINFOR;

程序运行资源管理器截图

虚拟机测试

可以看到两个明显的处理,每次都是运行在CPU 1 和 3 上,因为串口没有接,所以低一点,淹没在下面的曲线里面了

image-20220908082454673

板子测试

这里我还没有找到那个对应那个,也不知道程工没有。

image-20220908083204023


博客签名2021

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/16117.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iOS开发M1芯片遇到的问题

pod失败执行&#xff1a; sudo arch -x86_64 gem install ffi Then arch -x86_64 pod install M1芯片的Mac无法在模拟器上运行项目building for iOS Simulator或could not find module for target.. 真机上可运行&#xff0c;模拟器上不行&#xff0c;并出现以下错误&#xf…

高级UI之贝塞尔曲线

前言 相信很多同学都知道“贝塞尔曲线”这个词&#xff0c;我们在很多地方都能经常看到。但是&#xff0c;可能并不是每位同学都清楚地知道&#xff0c;到底什么是“贝塞尔曲线”&#xff0c;又是什么特点让它有这么高的知名度。 贝塞尔曲线的数学基础是早在 1912 年就广为人…

八款流行无线黑客工具,非常实用

1、Aircrack Aircrack是最受欢迎的无线密码破解工具之一&#xff0c;可用于802.11a / b / g WEP和WPA破解。Aircrack使用的算法是通过捕获数据包来恢复无线密码。收集到足够的数据包后&#xff0c;它会尝试恢复密码。为了使攻击更快&#xff0c;它通过一些优化实现标准的FMS攻…

腾格尔和黑鸭子,演唱《遥远的地方》不同版本,哪首歌更值得期待

说起中国华语乐坛的音乐人&#xff0c;腾格尔老师算比较出名的一位&#xff0c;听说最近他又推出了一首新歌。《遥远的地方》这首歌曲&#xff0c;就是腾格尔老师的新歌&#xff0c;可能很多人会对这个歌名感到有些熟悉。 早在九十年代的时候&#xff0c;中国华语乐坛非常流行组…

【雷神笔记本快捷键】雷神笔记本FN功能快捷键大全以及电脑CPU处于低功耗但电脑风扇高速转动噪音较大解决方案

雷神笔记本FN功能快捷键大全以及电脑CPU处于低功耗但电脑风扇高速转动噪音较大解决方案。 本计算机有16个功能键盘。这些键的功能因应用程序而异。 请参阅软件文档以了解各个键的使用方法。 【FN】键提供便携式电脑的扩展功能,始终与另一按键搭配使用。‘【FNEsc】:启用或禁用…

教你如何使用 Visual Studio IDE 正确的进行 C++ 桌面开发

目录 先决条件 入门 一、演练&#xff1a;使用项目和解决方案 (C) 准备工作 创建项目 在 Visual Studio 中创建项目 组织项目和文件 向项目添加类 向主函数添加测试代码 向项目添加测试代码 生成并运行应用项目 生成并运行此项目 二、演练&#xff1a;生成项目 (C…

改良海量数据存储的若干的手段-转变数据垃圾为黄金

教材篇 直到翻看了后面章节&#xff0c;才注意到封面上面的标语&#xff0c;中文意思是“禁止倾倒数据垃圾&#xff0c;违者务必读此书&#xff01;” 大致祖师爷对杂乱无序的数据垃圾深恶痛绝&#xff0c;在这点上大凡上了点年头的数据工作者都是深有体会~ 直到翻看了后面章…

三相和单相智能微型断路器功能有区别吗?

安科瑞 华楠 ASCB1系列智能微型断路器是安科瑞电气股份有限公司全新推出的智慧用电产品&#xff0c;产品由智能微型断路器与智能网关两部分组成&#xff0c;可用于对用电线路的关键电气因素&#xff0c;如电压、电流、功率、温度、漏电、能耗等进行实时监测&#xff0c;具有远程…

渗透测试与漏洞扫描的区别

企业通常将漏洞扫描视为渗透测试的替代方法。这种认识是错误的。具有网络安全意识的组织必须在其业务流程中包括这两项活动&#xff0c;并确保它们协同工作。错过其中之一会大大降低 Web 应用程序安全性和网络安全性的安全状况。渗透测试和漏洞扫描也被单独视为合规性要求&…

【TFS-CLUB社区 第6期赠书活动】〖uni-app跨平台开发与应用从入门到实践〗等你来拿,参与评论,即可有机获得

文章目录❤️‍&#x1f525; 赠书活动 - 《uni-app跨平台开发与应用从入门到实践》❤️‍&#x1f525; 编辑推荐❤️‍&#x1f525; 抽奖方式与截止时间❤️‍&#x1f525; 赠书活动 → 获奖名单❤️‍&#x1f525; 赠书活动 - 《uni-app跨平台开发与应用从入门到实践》 内…

Redis事务操作

Redis事务操作 每个公司每个项目可能有不同的引入方式&#xff0c;但是最基本的都大差不差&#xff0c;所以这里只展示最基本的。 redis事务定义 redis事务是一个单独的隔离操作&#xff0c;事务中的所有命令都会序列化、按顺序地执行&#xff0c;事务在执行的过程中&#x…

Rancher - v2.6.5升级v2.7.0

Rancher&#x1f449;v2.6.5升级v2.7.0 时间&#xff1a;2022年11月18日16:37:50 2022-11-17凌晨&#xff0c;rancher推出了新的稳定版&#xff1a;v2.7.0。 一、为什么要升级到v2.7.0&#xff1f;v2.6.5有什么严重的问题吗&#xff1f; ● 对于私有云来说&#xff0c;一般生…

C51项目 - 可调万年历

目录一、实验目的二、实验仪器三、实验效果预览1.显示效果2.调节效果四、实验原理五、单片机代码1.头文件包含2.类型定义3.时钟模块4. 液晶显示模块5.温度传感器模块6. 红外通讯模块7.开机初始化8.特殊功能函数9.代码段常量10.完整代码一、实验目的 使用51单片机作为主控芯片&…

Hybrid app混合开发的一些经验和总结

随着5G技术的发展和移动终端普及&#xff0c;移动设备的便捷性和网络的泛在化&#xff0c;移动应用已广泛应用于电子商务、电子政务、医疗和辅助教学中。 智能手机等移动终端的存储、运算能力不断增强&#xff0c;但其显示、输入等不如PC灵活&#xff0c;对操作界面灵活性有强…

Redis 搭建高可用集群

、单个redis服务搭建请参考&#xff1a;redis服务搭建 2、在/usr/local下创建目录redis-cluster,并在redis-cluster下创建 6379、6380、6381目录以及data、temp目录 # cd /usr/local # mkdir redis-cluster --其他文件创建类似&#xff0c;此处不一一写出 3、复制安装后的re…

[笔记]快乐的Linux命令行《二》文件系统中跳转

系列文章目录 [笔记]快乐的Linux命令行《一》LInux系统简介以及什么是shell [笔记]快乐的Linux命令行《二》文件系统中跳转 文章目录系列文章目录前言一、文件系统中跳转1.1 理解文件系统树Linux基本文件系统树目录介绍与Windows的异同1.2 当前工作目录pwd 显示当前工作目录1.…

CSS基础入门

CSS基础入门 1.官方文档 1.CSS 指的是层叠样式表* (Cascading Style Sheets) 2.地址: https://www.w3school.com.cn/css/index.asp 2.为什么需要 CSS 1.在没有 CSS 之前&#xff0c;我们想要修改 HTML 元素的样式需要为每个 HTML 元素单独定义样式属性&#xff0c;费心费力…

手把手教你如何编写一个Makefile文件

一、概念理解&#xff08;彩蛋藏在某个地方&#xff09; 1.1 什么是Makefile&#xff1f; C语言中&#xff0c;我们使用visual studio开发软件时候&#xff0c;写程序开始时候都会创建一个project项目文件&#xff0c;然后在文件里面编译 .h 和 .c 的文件。在Linux中&#xf…

给大家免费发布几款苹果CMSv10模板影视主题,附带教程和演示截图

苹果CMS是优秀的开源PHP建站系统,在主流建站系统中特色鲜明,以灵活、小巧、兼容性好、负载强等优点而深受许多站长的喜爱。 很多人在运营苹果cms站点都会找模板&#xff0c;下面博主给大家推荐几款免费并且简约的模板&#xff0c;其实个人认为模板这东西不需要买太贵的&#xf…

编译安装LAMP架构搭建wordpress个人博客和discuz论坛——编译安装基于 FASTCGI 模式LAMP架构多虚拟主机WEB应用

文章目录1 实验目标2 环境准备3 实现步骤3.1.1 二进制安装3.1.2为wordprss和discuz应用准备数据库和用户帐号3.2 编译安装 httpd 2.43.3 编译安装 fastcgi 方式的 php 7.43.4 修改配置 httpd 支持 php-fpm3.5 准备wordpress和discuz! 相关文件3.6 测试访问3.7 安装成功1 实验目…