我有一个情况,需要在服务中运行一个不停的循环,每次检查特定的条件,然后根据情况采取相应的行动。从设计的角度来看,使用 while (true)
循环非常适合:
while (true)
{
Process();
}
Process() 方法检查内存中(快速)的数据存储状态。如果它发现基于状态有工作要做,它将使用 Task.Run()
进行处理(因此控制立即返回到循环中)。
我看到一些参考资料指出这样会占用不必要的 CPU 循环,建议使用 Timer
或在循环中添加 Thread.Sleep
。我也看到有帖子说明使用 while (true)
没有问题。
在我的开发机上,似乎没有负面影响,虽然 CPU 使用率确实会增加。可能是因为 CPU 使用率分布在多个核心上,而部署环境可能只有一个单核心。
while (true)
循环对 CPU 有负面性能影响吗?如果有,有什么正确的缓解方式?
while(true) { Task.Run(..) }
会导致CPU占用率过高。请查看生产者消费者模式和发布订阅模式,了解如何正确处理此问题。 - Aron