博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Process和Thread在指定CPU运行
阅读量:5736 次
发布时间:2019-06-18

本文共 1025 字,大约阅读时间需要 3 分钟。

最近帮朋友写了一个多线程程序,他那边一运行多线程就出错,我这边却没有任何问题,找了好久才找到解决方法,原来是CPU的问题,有朋友遇到同样的问题,可以一起参考

//进程与指定cpu绑定

SetProcessAffinityMask(GetCurrentProcess(), dwMask);

 //线程与指定cpu绑定

SetThreadAffinityMask(GetCurrentThread(),dwMask);

 dwMask为CPU序号的或运算值:1(0001)代表只运行在CPU1,2(0010)代表只运行在CPU2,3(0011)代表可以运行在CPU1和CPU2,以此类推。

//使用8核CPU

SetThreadAffinityMask(-1,254)

 

因此,若要将3个线程限制到CPU1、2和3上去运行,可以这样操作

//Thread 0 can only run on CPU 0. SetThreadAffinityMask(hThread0, 0001); //第0位是1SetThreadAffinityMask(hThread1, 0002); SetThreadAffinityMask(hThread2, 0003); SetThreadAffinityMask(hThread3, 0004);

如果要将3个进程限制到CPU1、2和3上去运行,可以这样操作

SetProcessAffinityMask( hProcess0, 0001);// use CPU 0 onlySetProcessAffinityMask( hProcess1, 0002 );// use CPU 1 onlySetProcessAffinityMask( hProcess2, 0003 );// allow running on both CPUsSetProcessAffinityMask( hProcess3, 0004 );// use CPU 4 only

 

应用场景举例:

将UI线程限制在一个CPU,将其他实时性要求较高的线程限制在另一个CPU。这样,当UI需要占用大量CPU时间时,就不会拖累其他实时性要求较高的线程的执行。同样可以将UI线程与一些优先级不高但耗时的异步运算线程设置在不同CPU上,避免UI给人卡顿的感觉。

相关文章https://support.microsoft.com/zh-cn/kb/932375

转载地址:http://sxgwx.baihongyu.com/

你可能感兴趣的文章
ssh链接git服务器,解决push pull要求输入密码问题
查看>>
Netty 源码解析(二):对 Netty 中一些重要接口和类的介绍
查看>>
mysql中主外键关系
查看>>
第七章:数据字典
查看>>
python 字符串 类型互相转换 str bytes 字符串连接
查看>>
service mysqld start
查看>>
linux时间
查看>>
Spring+Mybatis项目中通过继承AbstractRoutingDataSource实现数据库热切换
查看>>
让Alert弹窗只弹出一次
查看>>
用友软件操作流程(新建年度帐、年度结转步骤)
查看>>
mysql权限管理
查看>>
我的友情链接
查看>>
让你快速上手的Glide4.x教程
查看>>
浮动和清除(闭合)浮动
查看>>
微信小程序注册流程
查看>>
LR录制脚本时IE打不开的原因
查看>>
类的基础
查看>>
微博自动化测试
查看>>
Sublime Text 2.0.2,Build 2221注册码
查看>>
js scroll事件
查看>>