在多处理器计算机上的Windows中,线程是否会在其生命周期内更改CPU /核心?
答案 0 :(得分:8)
是,默认情况下为thread can be scheduled on any available core。如果要将线程限制为特定的核心或核心,则可以设置线程关联。
答案 1 :(得分:6)
线程在其生命周期内是否更改了CPU /核心?
它可以。它不一定会改变,但没有什么能阻止操作系统在核心之间移动线程。
如果您需要控制线程的操作,Windows API会通过SetThreadIdealProcessor或SetThreadAffinityMask和SetProcessAffinityMask对此进行一些控制。
答案 2 :(得分:0)
如果线程的生命周期很长,有许多阻塞调用,例如。一个池线程或应用程序生命周期线程,它几乎肯定会在许多不同的核心上运行 - 当它准备就绪时,如果有可用核心,操作系统会将其分配到一个免费核心,或者可以抢占另一个运行的低优先级线程一些核心允许新准备好的线程运行。
即使线程只有很短的生命周期并且是CPU密集型的,也不能保证它不会在某个阶段被更高优先级的线程抢占,该线程已经准备就绪,并且可能稍后被分派到另一个核心。
如果必须,请优先考虑优先级和线程亲和力。如果您设法生成任何显示整体性能改进的数字,请告诉我们:)