[英]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.