【发布时间】:2014-10-11 16:22:28
【问题描述】:
我有一种情况,我需要在服务中运行一个恒定循环,每次检查某些条件,然后采取适当的措施。从设计的角度来看,使用while (true) 循环非常适合:
while (true)
{
Process();
}
Process() 方法检查内存中(快速)数据存储的状态。如果它根据状态发现有工作要做,它使用Task.Run() 处理它(因此控制立即返回循环)。
我看到一些参考资料表明这会占用不必要的 CPU 周期,我应该使用 Timer,或者将 Thread.Sleep 添加到循环中。我还看到帖子说使用while (true) 没有任何问题。
在我的开发机器上,它似乎没有负面影响,尽管 CPU 使用率确实上升了。可能是 CPU 使用分散在多个核心上,而部署环境可能只有一个核心。
while (true) 循环是否会对 CPU 性能产生负面影响,如果有,减轻影响的正确方法是什么?
【问题讨论】:
-
while(true) { Task.Run(..) }肯定会盯住 CPU。请查看 Producer Consumer 模式和 PubSub 模式,了解如何正确执行此操作。
标签: c# while-loop infinite-loop