Empty Infinite While循环的CPU使用率增加

时间:2014-07-31 04:57:54

标签: c# performance while-loop

任何人都可以解释为什么以下无限循环占用大量CPU(CPU usage has increased upto 50% if total core is 2 and 100% if total CPU core is just 1

但是,如果我取消注释该行,它会减少到1或2个CPU使用率?

    public class Program
    {
        public static void Main(string[] args)
        {
            while (true)
            {
                //Console.WriteLine("hello..");
            }
        }
    }

4 个答案:

答案 0 :(得分:6)

Console.WriteLine是一个阻塞(可中断)I / O调用,因此当处理器在I / O上被阻塞时可能会发生其他事情。事实上,它在I / O上花费的时间明显多于,而不是评估琐碎条件true和跳跃!

如果没有写字线呼叫,您的处理器将完全忙碌,无法中断。

尝试使用Console.WriteLine或任何不阻止的内容替换int x = 1。这应该像空体情况一样。

答案 1 :(得分:2)

当行被注释掉时,while循环什么都不做,只消耗CPU旋转一圈。当您调用WriteLine时,您的程序会调用暂时暂停您的进程的操作系统。这导致您的程序被阻止"在大多数情况下,只在write()系统调用之间消耗CPU。

答案 2 :(得分:1)

原因是因为您的CPU在执行该循环时无法执行任何其他操作。 CPU不知道无限循环不是一个复杂的计算,只需要大量的迭代。因此,它不断评估真实条件,导致消耗增加CPU使用率。

您可能还想查看Halt and Catch Fire

旁注:

如果您想避开无限循环,那么您只需使用WaitHandle即可。要让流程退出外部世界,请使用带有唯一字符串的EventWaitHandle

答案 3 :(得分:1)

CPU花费所有时间检查true是否为真,编译器没有对其进行优化。使用WriteLine时,进程可以在写入控制台时阻止,从而降低整体CPU使用率。