【问题标题】:Does a thread run on the same CPU/core throughout its life?线程在其整个生命周期中是否在同一个 CPU/内核上运行?
【发布时间】:2013-08-28 19:42:44
【问题描述】:

在多处理器机器上的 Windows 中,线程在其生命周期内是否会更改 CPU/内核?

【问题讨论】:

标签: windows multithreading


【解决方案1】:

是的,默认情况下是thread can be scheduled on any available core。如果您想将线程限制为特定的一个或多个核心,您可以设置线程亲和性。

【讨论】:

  • 感谢您的链接。但这并不能回答问题。线程可以在任何处理器上运行,但它可以在其生命周期内更改处理器。
  • 我认为你错过了调度程序连续运行,而不仅仅是在线程创建时。
  • 我现在看到...忽略我上面的评论。
【解决方案2】:

线程在其生命周期内是否会更改 CPU/内核?

可以。它不一定会改变,但没有什么能阻止操作系统在内核之间移动线程。

如果您需要控制线程的操作,Windows API 确实通过SetThreadIdealProcessorSetThreadAffinityMaskSetProcessAffinityMask 对此提供了一些控制。

【讨论】:

    【解决方案3】:

    如果线程的生命周期很长,并且有很多阻塞调用,例如。一个池线程或应用程序生命周期线程,它几乎肯定会在许多不同的内核上运行 - 当它准备好时,如果有可用的内核,操作系统会将它分派到一个空闲内核上,或者可能会抢占另一个运行在其上的较低优先级的线程一些内核以允许新准备好的线程运行。

    即使线程只有很短的生命周期并且是 CPU 密集型的,也不能保证它不会在某个阶段被更高优先级的线程抢占,该线程已准备好并可能稍后被分派到另一个内核。

    如果必须的话,可以调整优先级和线程相关性。如果您设法通过这样做生成任何显示整体性能改进的数字,请告诉我们:)

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多