因此,我一直在谷歌上搜索这个问题的答案,但我找不到这个问题的直接技术答案。(或者如果找到了,也是以一种令人困惑的方式)
那么,假设您有一个使用 2 个线程的程序/游戏,并且只使用 2 个线程。使用四核 CPU 并启用超线程后,它是否知道仍然使用两个物理核心而不是仅使用 2 个线程,使用 50% 的 CPU 而不是 25%?超线程是否会导致此类问题,人为地使用了它实际可以/应该使用的一半?Windows 如何知道如何处理所有这些问题?
谢谢!如果我提问的方式有点奇怪,请见谅,我只是想简洁明了。
答案1
是的,它会按照您的要求运行。Windows 知道哪个逻辑处理器位于哪个核心中。它将每个核心仅使用一个“逻辑处理器”,直到您想要同时运行的线程数多于核心数为止。
(“逻辑处理器”是 Windows 内部用来表示“可以运行线程的东西”的名称。如果您没有打开 HT,则每个核心有一个 LP。如果打开了 HT,则每个核心有两个 LP。这使我们可以始终简单地谈论“逻辑处理器”,而不必不断地限定事物。)
选择“在何处运行线程”的确切算法在Windows 内部原理由 Solomon、Russinovich 和 Ionescu 撰写。这是一份冗长的描述,包括许多“边缘情况”,例如停放核心、NUMA 机器(具有两个或多个物理 CPU 包的机器,每个 CPU 包都有自己的 RAM 组)等。
但是,是的:Windows 尝试保持每个核心中的一个 LP 处于空闲状态,直到想要运行的线程数多于核心数。