【发布时间】:2013-08-28 19:42:44
【问题描述】:
在多处理器机器上的 Windows 中,线程在其生命周期内是否会更改 CPU/内核?
【问题讨论】:
-
Threads and CPU Affinity 的可能重复项
在多处理器机器上的 Windows 中,线程在其生命周期内是否会更改 CPU/内核?
【问题讨论】:
是的,默认情况下是thread can be scheduled on any available core。如果您想将线程限制为特定的一个或多个核心,您可以设置线程亲和性。
【讨论】:
线程在其生命周期内是否会更改 CPU/内核?
可以。它不一定会改变,但没有什么能阻止操作系统在内核之间移动线程。
如果您需要控制线程的操作,Windows API 确实通过SetThreadIdealProcessor 或SetThreadAffinityMask 和SetProcessAffinityMask 对此提供了一些控制。
【讨论】:
如果线程的生命周期很长,并且有很多阻塞调用,例如。一个池线程或应用程序生命周期线程,它几乎肯定会在许多不同的内核上运行 - 当它准备好时,如果有可用的内核,操作系统会将它分派到一个空闲内核上,或者可能会抢占另一个运行在其上的较低优先级的线程一些内核以允许新准备好的线程运行。
即使线程只有很短的生命周期并且是 CPU 密集型的,也不能保证它不会在某个阶段被更高优先级的线程抢占,该线程已准备好并可能稍后被分派到另一个内核。
如果必须的话,可以调整优先级和线程相关性。如果您设法通过这样做生成任何显示整体性能改进的数字,请告诉我们:)
【讨论】: