主动设置进程CPU绑定(CPU亲和性)解决QT多线程在Linux上只使用单核的问题

在Linux系统中,使用QT进行多线程计算时发现线程并未充分利用所有CPU核心,仅占用车一个核不超过100%。问题排查过程中,通过编写小程序验证了多核CPU可以被充分使用。考虑到线程绑定问题,尝试使用pthread_setaffinity_np和sched_setaffinity设置线程和进程的CPU亲和性,最终通过设置进程亲和性解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 【问题描述】

使用QT的多线程进行计算密集型任务,线程数不少于CPU的逻辑处理单元数,但是在Linux上查看系统监视器,总是只占用一个核(不超过100%),Window下是没有这个问题的。

【问题排查过程】

1. 首先此问题是在做国产化改造(Linux移植)才出现的,Windows上不存在此问题,因此重点在Linux上测试。

2.为了排除干扰,单独写多线程计算的小程序,发现多核CPU可以每个都充分利用都达到100%的。

3.有同事提到了是不是线程被绑定了(线程的CPU亲和性),但是找不到代码中哪里设置过,但是有三方库,不排除有可能哪里设置了。因此通过pthread_setaffinity_np在主线程中设置亲和性(了解到子线程会继承的),但是不起效果,有继续翻博客,发现还有进程亲和性的设置函数,想着是不是设置主线程不行,应该设置进程呢,于是用sched_setaffinity来设置(见本博客开头的插图中的代码)发现可以了。另外在设置前后还特意查看亲和性(sched_getaffinity),确认设置成功。

【其他参考】

查看某个进程线程数
ps -T -p pid

查看特定某个进程线程使用内存情况
top -H -p pid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

piaopiaolanghua

感谢老板鼓励~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值