还在讨论这个问题啊。这问题应该不算广泛吧?很多也是没办法的,按理来说单线程(为免麻烦我就把一个时刻只有一条线程运行的程序简称单线程了)对于多核是只能识别成一个单核单线程CPU的,哪怕核心再多它也只能认一个,其它都浪费掉,所以在多核上的运行和在单线程单核上没有区别,所以线程模型编写的程序在并行机上也是有无须修改直接使用的优点。但是实际上程序是不会使用CPU的,只是使用操作系统提供的资源而已,这时候很多问题是和系统有关,有问题可以多上微软网站(应该都是用微软的吧)找解决办法,比如微软的客户支持里就提到过有关按需切换(DBS)的问题,在多个核心(可用线程资源,包括多核或多个逻辑核心)间迁移单线程工作时(这是对核心资源的充分利用,是合理的),有可能会导致Windows的DBS对核心状态的计算错误,从而引起单线程性能的下降。里面有相关的补丁以及打上补丁后的禁用方法(解决了性能问题,又产生电耗问题),适用多CPU/多核/超线程之类。另外,很多程序尤其是游戏经常会通过函数来检查配置状态,比如通过queryperformancefrequency检查CPU频率,但是对这些结果又只取最低的32位值,会造成2GHz以上CPU不能正确识别(如果是queryperformancecounter会对多物理/多逻辑核心造成影响),这些都是要靠软件商的补丁解决的,和是否单线程也没什么关系,出了问题还是要多方面考虑,到相关厂商网站多点找技术支持交流吧。 |