在多处理器机器上的 Windows 中,线程在其生命周期内是否会更改 CPU/内核?
问问题
1717 次
3 回答
8
是的,默认情况下,可以在任何可用的 core 上安排线程。如果要将线程限制为特定核心或核心,则可以设置线程亲和性。
于 2013-08-28T19:45:36.823 回答
7
线程在其生命周期内会更改 CPU/内核吗?
它可以。它不一定会改变,但没有什么能阻止操作系统在内核之间移动线程。
如果您需要控制线程的操作,Windows API 确实通过SetThreadIdealProcessor或 SetThreadAffinityMask和SetProcessAffinityMask对此提供了一些控制。
于 2013-08-28T19:45:05.507 回答
0
如果线程的生命周期很长,并且有很多阻塞调用,例如。池线程或应用程序生命周期线程,几乎可以肯定会在许多不同的内核上运行 - 当它准备好时,如果有可用的内核,操作系统会将其分派到空闲内核上,或者可能会抢占另一个运行在其上的较低优先级的线程一些核心以允许新准备好的线程运行。
即使线程只有很短的生命周期并且是 CPU 密集型的,也不能保证它不会在某个阶段被更高优先级的线程抢占,该线程准备好并且可能稍后分派到另一个内核。
如果必须的话,可以玩弄优先级和线程相关性。如果您设法通过这样做生成任何显示整体性能改进的数字,请告诉我们:)
于 2013-08-28T19:59:36.850 回答