Windows|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?》
【Windows|Windows是如何利用超线程特性的】
- ios16|未受到电商冲击,理发店为啥还是纷纷倒闭?过来人说出真相
- 有人觉得中暑就是热出来的,吃一些退烧药就好了,这种做法 蚂蚁庄园今日答案6月28日
- 浮甘瓜于清泉,沉朱李于寒水”描述的是什么场面 蚂蚁庄园今日答案6月28日
- 为验证人类和黑猩猩,是否会产生新的后代,科学家找来5位姑娘!
- 喜马拉雅山出现的“雪人”是何生物?目击者:智商高、攻击性强
- 显卡|这就是RTX 4090 Ti显卡?又厚又重,超过三槽要1200W电源
- 土耳其发现四肢爬行人群,这是咋回事?科学家警告:人类要留心了
- 图像传感器|到手1849元重量189g这才是高性价比的骁龙870直屏手机
- 创投圈|抖音小店无货源适合新手小白么?如何精细化运营?新手小白看来
- “大家好,我是渣渣辉!”,最近刷爆朋友圈的港普大家来了解一下
