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

本文共 1076 字,大约阅读时间需要 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

转载于:https://www.cnblogs.com/testsec/p/5897670.html

你可能感兴趣的文章
ISA系列之ISA Server 2004 中的新增功能--利用多个网络
查看>>
设计Unix下木马程序
查看>>
任务栏出现两个重复图标的解决办法
查看>>
AlphaZero完胜三大世界冠军棋类程序:5000个TPU、自学一天
查看>>
centos 查看每天应用程序的iowait
查看>>
.Net Micro Framework研究—中文显示
查看>>
修改虚拟机MAC地址的方法
查看>>
WINDOWS7更改访问windows共享的用户名和密码
查看>>
Mac下好用的批量文件扩展名修改工具
查看>>
配置gitlab环境实现代码管理及Web Hook测试和ldap认证
查看>>
几副工作对联@Alibaba
查看>>
五步教你使用JCS快速搭建缓存环境
查看>>
XenApp_XenDesktop_7.6实战篇之四:AD、DNS服务器高级配置
查看>>
利用IPSec使用策略和规则提升网络安全性
查看>>
虚拟资源引流变现
查看>>
015 有趣的查询条件
查看>>
Delphi下使用指针的简单总结
查看>>
iBatis2配置
查看>>
摩卡端到端监控管理(Mocha E2E)解决方案
查看>>
YUM安装LNMP架构
查看>>