为什么几个线程的几个状态(2个CPU)只在一个CPU上运行

2009年6月 C/C++大版内专家分月排行榜第三
2009年7月 总版技术专家分月排行榜第二2009年3月 总版技术专家分月排行榜第二2009年1月 总版技术专家分月排行榜第二2005年7月 总版技术专家分月排行榜第二2005年5月 总版技术专家分月排行榜第二2005年3月 总版技术专家分月排行榜第二
优秀小版主2015年8月优秀小版主2015年9月优秀小版主2015年5月优秀小版主2015年2月论坛优秀版主
2009年1月 C++ Builder大版内专家分月排行榜第一2008年12月 Delphi大版内专家分月排行榜第一2008年11月 Delphi大版内专家分月排行榜第一2008年10月 Delphi大版内专家分月排行榜第一2008年6月 Delphi大版内专家分月排行榜第一2008年1月 Delphi大版内专家分月排行榜第一2005年7月 C++ Builder大版内专家分月排行榜第一
2009年1月 Delphi大版内专家分月排行榜第二2008年12月 C++ Builder大版内专家分月排行榜第二2008年7月 Delphi大版内专家分月排行榜第二2005年7月 Delphi大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。2009年6月 C/C++大版内专家分月排行榜第三
2009年7月 总版技术专家分月排行榜第二2009年3月 总版技术专家分月排行榜第二2009年1月 总版技术专家分月排行榜第二2005年7月 总版技术专家分月排行榜第二2005年5月 总版技术专家分月排行榜第二2005年3月 总版技术专家分月排行榜第二
优秀小版主2015年8月优秀小版主2015年9月优秀小版主2015年5月优秀小版主2015年2月论坛优秀版主
2009年1月 C++ Builder大版内专家分月排行榜第一2008年12月 Delphi大版内专家分月排行榜第一2008年11月 Delphi大版内专家分月排行榜第一2008年10月 Delphi大版内专家分月排行榜第一2008年6月 Delphi大版内专家分月排行榜第一2008年1月 Delphi大版内专家分月排行榜第一2005年7月 C++ Builder大版内专家分月排行榜第一
2009年1月 Delphi大版内专家分月排行榜第二2008年12月 C++ Builder大版内专家分月排行榜第二2008年7月 Delphi大版内专家分月排行榜第二2005年7月 Delphi大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。cpu吧没人回,特来此问双核四线程cpu哪2个线程对应1个核【nvidia吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:60,793贴子:
cpu吧没人回,特来此问双核四线程cpu哪2个线程对应1个核收藏
任务管理器显示有cpu0 cpu1 cpu2 cpu3四个线程,我想只留1个核的2个线程运行程序,请问应该保留哪2个?吧主在吗?
上海华传科技代理销售nvidia显卡原装正品, QQ:英伟达nvidia显卡售后无忧!
似乎就是0和1对应核心1,2和3对应核心2不过这个你可以开着监控做个测试,4线程都占用的你选前两个执行然后看下核心1的使用率情况估计就知道了
点亮12星座印记,
主要是有些人说4个线程运行程序,cpu是随机分配某几个线程工作,不好找到规律,现在有些游戏不支持多核cpu,只保留一个核玩游戏会流畅点
回复3楼:感觉你考虑的有点复杂了,对多核支持不好这个事情兴许老游戏会有类似情况,最起码的双核支持一般游戏还是没问题的
点亮12星座印记,
登录百度帐号推荐应用8841人阅读
操作系统(13)
VS/VC/MFC(125)
一个程序指定到单独一个CPU上运行会比不指定CPU运行时快。这中间主要有两个原因:
1)CPU切换时损耗的性能。
2)Intel的自动降频技术和windows的机制冲突:windows有一个功能是平衡负载,可以将一个线程在不同时间分配到不同CPU,从而使得每一个CPU不“过累”。然而,Inter又有一个技术叫做SpeedStep,当一个CPU没有满负荷运行时自动降频从而达到节能减排的目的。这两个功能实际是冲突的:一个程序被分配到多个CPU协同工作-&每个CPU都不是满载-&每个CPU都会降频-&windows发现每个CPU性能都降低了,因此程序执行速度也降低了。
因此,将线程(进程)绑定到指定CPU核心,从而不让windows自作主张帮我们分散任务,从而提高单线程效率是很有必要的。有两种方法实现绑定进程到指定CPU:
1)手工调节:在资源管理器的进程里面,设置相关性,可以设置进程到某个或者某些指定的CPU核心。
这种方法最简便,同样是最优效率的,因为你可以根据当前CPU的负载情况进行选择。
2)代码自动调节:
参考:/kex1n/archive//2040924.html
具体函数为:
DWORD_PTR SetThreadAffinityMask(HANDLE hThread, DWORD_PTR dwThreadAffinityMask);
其中,第一个参数为线程句柄,第二个参数为一个mask。
如果要知道当前线程的句柄,可以通过函数:GetCurrentThread()得到。否则,在创建多线程的时候,也同样可以得到创建的线程的句柄。
第二个参数为mask,可取值为0~2^31(32位)和0~2^63(64位),每一位代表每一个CPU是否使用。
比如,你要指定进程到第0个CPU上,则mask=0×01
第1个CPU:mask=0×02
第2个CPU:mask=0×04 (注意不是0×03)
第3个CPU:mask=0×08
以此类推。
如果要指定多个CPU:
比如第0、1个:mask=0×03
第1、2个:mask=0×06
以此类推。
如果CPU个数不足,则会进行取模操作。比如一共4个CPU,则mask=0×0010则和0×01一样。
这种方法的好处是多线程时不用每次都手动选择CPU,缺点是万一选到的CPU负载很高,那么程序执行速度就慢了(英雄所见略同所以大家都抢到同一个CPU去了么~~)
效果如下图所示:
还有一个实用的函数来获取当前CPU的核心数量:
SYSTEM_INFO
GetSystemInfo(&info);
printf(&Number of processors: %d.\n&, info.dwNumberOfProcessors);
输出的是逻辑核心数量,比如i3处理器就是双核心四线程,输出4。i5处理器是四核心四线程,输出也是4。
这样就可以方便的知道当前系统一共有多少个CPU了,同时也方便了线程数选择。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:446661次
积分:5079
积分:5079
排名:第5439名
原创:51篇
转载:299篇
评论:35条
(9)(5)(5)(1)(1)(22)(1)(9)(1)(9)(16)(1)(1)(2)(21)(2)(5)(26)(2)(2)(4)(11)(13)(47)(21)(47)(6)(1)(3)(1)(14)(2)(1)(1)(23)(5)(10)}

我要回帖

更多关于 最多开几个线程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信