- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多核心和单核心CPU怎样工作的?
多核心和单核心CPU怎样工作的?
多核心和单核心CPU怎样工作的?
WINDOWS平台上的WIN32程序的线程,多核心处理的问题
关于多核心好不好,程序如何如何,速度谁快谁慢,我有话说.帖子的题目已经把议论的范围确定了,我们只讨论X86/X64 CPU在WINDOWS平台上的WIN32程序的线程,多核心处理的问题
我不想说谁好谁快,看完了请诸位自己分析
首先,说说,线程,进程的概念.一个EXE是一个程序,只有一个进程,进程中包括了由操作系统分配给这个程序的基本资源,但是我们伟大的CPU并不能直接运行进程(WINDOWS系统上是这样的)而是要运行该进程中的一个线程.线程能够通过操作系统获得CPU的使用权限来让自己运行(WIN XP上通常每次获得执行权利的时间是2ms)也就是说,一个进程对应一个EXE,这个进程至少包含一个线程来执行.那么,简单的说,只包含一个线程的进程可以叫做单线程程序,如故包含多个,可以叫做多线程程序了.(实际上,即便是编写程序的人,只编写了一个单线程的程序,那么在运行的时候也不可能仅仅只有一个线程,因为操作系统还要自动为他建立一些其他的线程来保证这个程序的运行.)
好,现在基本上闹明白了,进程和线程了.现在说单核心(个)和多核心(个)CPU.一个核心(一个物理CPU)在WINDOWS里面算做一个CPU,每个CPU可以得到操作系统分配的处理任务,也就是说某个核心可以执行操作系统中某个进程的线程.对于单线程程序,他的唯一一个线程要想获得CPU时间,必须进入操作系统队列排队,经由操作系统调度之后,获得对某个CPU时间的权利(如果是单核心的,那么肯定只有1个选择了,多核心的话,每个CPU核心的队列他都可以进入,这就好比一个超级市场,有1个收银窗口和2个的区别).对于多线程的程序,任何一个线程要执行的话,也要进行排队,在单核心CPU中,所有的线程都要排队在一个CPU上等待顺序执行,在多核心CPU上,同一个进程的多个线程有机会同时分布到多个CPU上并行计算。简单说起来是这样的,操作系统对CPU的分派是非常复杂的过程,谁也无法用简短的文章说清楚到底是怎么样的.和软件与硬件都有很大关系和差异.但是原理是没有错误的。
那么是不是核心多,速度就一定快?也不一定,因为一个进程中的线程可能需要等待其他线程或者进程完成某些操作后才能继续进行,当他们在等待状态时,即便轮到了他们的执行时间他们也只是立刻放弃运行权利继续等待而已.但是放弃之后,其他排队的线程可以立刻在CPU上继续执行,也不能说是一点帮助也没有.起码是让开了位置让其他人继续.多个核心还是可以同时计算的.
现在,让我们想想一个最经典的应用,你下着BT,开着QQ\MSN\SKYPE,打着魔兽,这些程序貌似在同时进行,但是别做梦了!!!!实际上在每个时间周期中,他们要顺序的排队执行,核心多的话,有可能能够同时有2个线程执行,但是如何这2个线程恰好又要互相同步等待,那么实际上优势不明显.但是也有可以从中获益的情况.例如SKYPE的线程0在核心1上,MSN的线程F在核心2上.QQ线程0在核心3上,魔兽线程0\5\7\E分别在核心1,2,3,4上.杀毒软件线程1\2\3\4\5在CPU核心5\7\9\11\15上(16核心的,嘿嘿,或者是2颗8核心的CPU又或者是4个Q6600(或者其他AMD CPU),如果真有那么多的话WINXP就不使用了要用到WIN SERVER产品啦)
还有一个重要的问题就是资源的争用,在计算机里面,有很多资源是不能够或者根本不可能同时共享使用的,也就是某个资源在同一时间不管你有多少个核心,你都需要排队使用(例如,马桶).这也是限制并行计算的一个因素.
多核心或者多处理器之间的同步和调度也需要损耗时间和计算能力作为代价来运行,所以,从客观的角度来说,说某些环境下多核心的处理器与单核心的处理性能是不可能仅仅从CPU核心数量上评判的。除了核心数量以外,还要有操作系统的差异,调度算法的不用,应用和驱动程序的特点等等等等等共同影响着处理的速度.
最后,可以简单得出一个简单的理论上的简单结论:
1.你的核心越多,你并行计算的机会就越多,但是你未必能够用得上.(对于同一个进程,所以速度并不明显加快,但是对于你,你同时做了2个或者多个进程的事)
2.你的核心速度越快,你的计算吞吐就越大,对你的处理速度有一定直接的影响.(例举一个不科学的小例子,一个16核心的586 133CPU,每个线程都只能在133上,一个P4 2.4,那么所有的线程都在2.4上(AMD的也一样,他们是一样一样一样的!再强调一次啊,可没偏向))
不要再发表什么关于 多任务下多核心有用,单任务没有 这样类似看法了,这句话放在WINDOWS系统上很傻很天真,什么叫任务?什么又多任务?什么又叫单任务?一个WINDO
文档评论(0)