【问题标题】:Thread High CPU Usage but at State of "Ready"线程 CPU 使用率高但处于“就绪”状态
【发布时间】:2013-11-08 12:12:29
【问题描述】:

我在 Windows 中使用 Process Explorer 来检查进程。

当我查看此进程的属性中的线程选项卡时,我看到 1 个线程具有高 CPU 使用率(双核服务器的总 CPU 约为 30-49%,因此如果将其等同起来,它会使用大量 CPU 时间单个线程到单个 CPU 次的时间间隔)。

现在,如果我坐下来观察这个线程,它会花费 98% 的时间处于“就绪”状态,而其他时间则处于“运行”状态。为了更好地说明这一点:

t=0, CPU = 35, State = Ready 
t=1, CPU = 49, State = Ready 
t=2, CPU = 50, State = Ready 
t=3, CPU = 39, State = Ready 
t=4, CPU = 32, State = Ready 
t=5, CPU = 35, State = Ready 
t=6, CPU = 37, State = Running
t=7, CPU = 40, State = Ready 
t=8, CPU = 42, State = Ready 
t=9, CPU = 43, State = Ready 

当处于就绪状态时,这个线程怎么会使用这么多 CPU?

提前感谢您的帮助!

【问题讨论】:

    标签: windows multithreading cpu


    【解决方案1】:

    这是海森堡在工作中的标准,你所看到的会受到观察行为的影响。为了让 Process Explorer 对正在运行的线程进行快照,它需要自己获取处理器。这降低了另一个线程忙于执行的可能性,尤其是在 2 核处理器上。 “就绪”表示线程处于活动状态,只是在创建快照时没有机会获取处理器。

    状态只能在多核处理器上变得可靠。 Mark Russinovich 使用的那种 :)

    【讨论】:

    • +1,对我来说听起来不错,但我想知道为什么,如果 procexp 快照线程正在运行,重 CPU 线程不会在另一个核心上更频繁地运行。也许 procexp 运行两个快照线程,每个内核一个?
    • 非常感谢您的快速回复。我将检查具有更多内核的服务器并回复您!
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 2011-04-16
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多