gpt4 book ai didi

c# - 为什么 Thread.Sleep( ... ) 避免 CPU 使用基于多线程 Windows 服务的应用程序的 100% 重执行?

转载 作者:行者123 更新时间:2023-11-30 18:56:57 27 4
gpt4 key购买 nike

我有一个巨大的文本解析 Windows 服务应用程序,通常需要 20 分钟才能完成整个过程,并且它会占用 100% 的 CPU。我在循环中每个项目的末尾设置了一个 Thread.Sleep(500),现在 cpu 消耗在 70% 到 0% 之间!!!!大约需要 3 个小时才能完成,这对我的业务案例来说很好。

这个问题对某些人来说可能很明显但对我来说却不是,为什么延迟使它消耗更少的 CPU?

最佳答案

在任务管理器中查看 CPU 使用率时,您实际上查看的是给定时间间隔内非 noop 命令的百分比。给定的 CPU 内核不能处于 34% 的状态。它要么在做某事,要么不做,但它每秒可以来回切换数十亿次。通过插入 Sleep 命令,结果是 CPU 花费更多时间无所事事,即使它有它可以做的工作。当什么都不花的时间与花在做某事上的时间平均时,结果是低于 100% 的使用率。如果您 sleep 时间较长,但 sleep 时间较少,您会看到它在 0% 到 100% 之间跳跃(这是真实发生的情况,只是您目前无法想象)。

关于c# - 为什么 Thread.Sleep( ... ) 避免 CPU 使用基于多线程 Windows 服务的应用程序的 100% 重执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14715971/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com