簡體   English   中英

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

[英]CPU usage increases for Empty Infinite 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..");
            }
        }
    }

Console.WriteLine是一個阻塞(可中斷)I / O調用,因此當處理器在I / O上被阻塞時可能會發生其他事情。 事實上,它在I / O上花費的時間明顯多於評估true和跳躍的瑣碎條件所花費的時間!

如果沒有寫信線呼叫,您的處理器將完全忙碌並且無法中斷。

嘗試用類似int x = 1或任何不阻塞的東西替換Console.WriteLine 這應該像空體情況一樣。

當行被注釋掉時,while循環什么都不做,只消耗CPU旋轉一圈。 當您調用WriteLine時,您的程序會調用暫時暫停您的進程的操作系統。 這導致程序在大多數情況下被“阻塞”,並且只在write()系統調用之間消耗CPU。

原因是因為你的CPU在執行該循環時不能做任何其他事情。 CPU不知道無限循環不是一個復雜的計算,只需要大量的迭代。 因此,它繼續不斷地評估真實條件導致消耗增加CPU使用率。

您可能還想檢查Halt和Catch Fire

在旁注:

如果你想避免無限循環,那么你可以簡單地使用WaitHandle 要讓進程退出外部世界,請使用帶有唯一字符串的EventWaitHandle

CPU花費所有時間檢查true是否為真,編譯器沒有優化它。 使用WriteLine ,進程可以在寫入控制台時阻止,從而降低整體CPU使用率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM