【苹果|Windows是如何利用超线程特性的】这个问题 , 取决于你所问的Windows是哪个版本?每个版本的Windows都不太一样 。
请容我慢慢道来 。
对于Windows 95 , Windows 98和Windows ME , 答案很简单:压根不会用到超线程 。 因为这些操作系统不是多处理器操作系统 。
对于Windows NT和Windows 2000来说 , 答案是:连操作系统自己都不知道有超线程这回事儿 。 为什么?这两个操作系统是在超线程发明之前编写的 。 如果你启用了处理器的超线程 , 则一块物理CPU在操作系统看来是两块独立的逻辑CPU 。 (也因此你需要为这两块CPU核心付授权费)
因为调度器(Scheduler)不会在多个虚拟CPU之间实现连接 , 所以 , 和一开始就不启用超线程相比 , 启用超线程之后的运行性能可能会更糟 。
考虑一台搭载有双超线程处理器的机器 。 这台机器上有两块物理处理器A和B , 每块物理CPU会扩展出两块虚拟CPU , 让我们将它们命名为A1 A2 B1和B2吧 。
假设你有两项CPU密集的计算任务 。 对于Windows NT和Windows 2000调度程序而言 , 所有四个处理器都是等效的 , 操作系统会选择其中两块CPU进行计算 。 如果你不那么走运 , 它会选择A1和A2 , 从而导致一块物理CPU同时运行两项计算密集型的任务 (每个都可能以半速和四分之三速之间的速度运行) , 而另外一块物理处理器B则会空闲等待调度 。 操作系统压根就不知道可以将这两项任务分别调度到两块不同的物理处理器上 , 从而提升性能 。
Windows XP和Windows Server 2003操作系统进行了改良 , 它们都可以正确面对这种超线程特性 。
当出现上述情况时 , 调度器会知道当前处理器的虚拟化配置 , 并智能地将两项计算任务分发到不同的物理处理器上 。
请注意 , 即使使用支持超线程的处理器 , 也可能发生缓存未命中的问题 。
例如 , 如果你有四个任务 , 其中两个严重依赖L2缓存 , 而其中两个不依赖 , 你最好将每个L2密集型任务放在单独的处理器上 , 因为L2缓存是由两个虚拟处理器共享的 。 将它们放在同一个处理器上会导致大量L2缓存未命中 , 因为这两个任务会争夺L2缓存插槽 。
当你使用数据中心服务器或者企业服务器版本的Windows时 , 事情又变得棘手了 。
这个时候 , 就不是三言两语能讲明白的了 。 我建议你瞄一瞄这篇白皮书 , 以了解其中的玄机 。
总结虚拟化其实一直都在进行 , 比如 , 现在比较火热的”元宇宙” 。
这让我想起了这东西:缸中之脑 。
最后Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一 , 里面有很多关于Windows的小知识 , 对于广大Windows平台开发者来说 , 确实十分有帮助 。
本文来自:《How does Windows exploit hyperthreading?》
- |揭开元宇宙快乐背后的真相,原来是八段锦底层逻辑的永生
- 航天器|氧气会耗尽吗?氧气真的会消失吗?氧气是怎么来的?二氧化碳的危害
- 外星人|外星人一定是“人”吗?他们的存在形式或超乎想象!
- |“撒哈拉之眼”是亚特兰蒂斯遗迹?这些细节之处太相似了
- 亚马孙热带雨林|“地球之肺”亚马逊雨林,为什么是人类禁区?到底有多恐怖?
- 太空|王亚平近照出现浮肿引发争议,真的是伙食太好了吗?真相让人心疼
- AR|本周大新闻|苹果AR头显算力等同M1,周融资约4.05亿美元
- 手环|抱怨是病,得治!专治抱怨的手环你想要吗?《不抱怨的世界》
- 创业|低成本创业之同城探店是怎么操作的?
- 美团|支付二维码管制,微信、支付宝躺枪,谁是最大赢家?