2012-06-29 84 views
4

出於好奇,是全部無限循環壞?所有無限循環都不好嗎?

  • 如果運行無限循環會發生什麼壞的影響和後果?
  • 此外,如果它們並不全是壞的,請給出一些例子,以便它們能夠達到有意義的目的嗎?
  • 他們需要有東西來關閉實例嗎?例如,我們總是在Java中使用它之後關閉StreamReader(不知道爲什麼)。

回答

4

我不確定你的意思是「壞」。

無限循環在許多場景中很常見,大多數是事件處理程序循環,其中程序位於無限循環中,並等待發生一些處理並返回等待的外部事件。這是圖形用戶界面和許多服務器編程的方式。

+0

我已經討論過在無限循環內重載計算機內存的文章。爲什麼GUI和服務器不會超載內存? – Theone

+0

我不知道這些文章意味着什麼是超載。一個無限循環,只有一個單獨的sleep語句,不會影響機器的內存。 –

+1

當無限循環內存在內存泄漏時,可能會發生內存過載。 – risingDarkness

1
  • 如果你正確編寫你的程序,沒有因爲循環而發生的副作用。
  • 關於微控制器無限循環用於永遠不會到達程序結束。在微控制器程序結束時,大部分時間沒有可以接管的操作系統。然後達到狀態,沒有定義的行爲存在,程序可以做任何事情。
0

舉一個簡單的服務器的例子,監聽連接

  • 監聽請求
  • Get請求,菌種線程爲該請求
  • 沖洗和重複

這某種場景很常見,你會在事件處理中一直看到它。

  • 程序將永遠不會終止,除非你手動殺死它(也是一個積極的,視情況而定)

他們需要有東西來關閉實例?

  • 不,你不這樣做,正如之前提到的,你可以手動殺死它,但你可以實現輸入命令行接受kill命令來結束正常
+0

如果你能從外部殺死它,它是一個無限循環嗎? ;) – risingDarkness

+1

編程中沒有任何東西是我朋友的無限;) – Robotnik

0

有時你會聽到這樣的話殺手循環,指的是一個嚴重的行爲循環(無限或其他)。通常保留用於無意中消耗大量CPU時間,內存或兩者的循環。所有的殺手循環都很糟糕。

根據您的糖尿病狀態,Froot循環也可能是殺手循環。

莫比烏斯帶是很好的無限循環。

0

術語「無限循環」最常用於程序中的循環,如果不存在可能終止它的外部動作,該循環不會終止。在大多數情況下,使用任何「中斷密鑰」將中斷信號發送到操作系統將證明它畢竟不是無限循環。而且電力浪涌或停電通常也會這樣做。而在某些操作系統的平臺上,可能會出現其他中斷信號並暫停進程。

因此僞無限循環對於除了某些「外部」影響之外不想終止的進程很有用。

1

不,他們不壞,他們實際上是有用的。

這取決於在無限循環過程中是否遺留了吞噬內存的部分代碼。幾乎所有的東西都會使用無限循環:視頻遊戲,網絡,機器學習等,因爲無限循環通常用於獲取即時用戶輸入/事件。

+0

你描述的循環可能沒有那麼明顯的結束條件,但它們不是*無限的。 – Holger

+1

術語「無限」是指你需要機器無限期運行的程序嗎? – Shinji

+0

不,我的意思是,例如,事件處理循環將終止某些事件,如關閉最後一個窗口或選擇「退出」菜單項,因此即使像路由器等獨立設備也有條件(如「關機」命令通過ssh接收),循環結束。真正的無限循環是非常罕見的。 – Holger

0

在實時程序中,無限循環是正常的。看一下Arduino IDE - 暴露的唯一兩個函數是setup()和loop()。假定除非斷開電源,否則loop()將永遠不會退出。

+0

事實上,循環函數會退出,但它會永遠被一次又一次地調用。即主函數基本上類似於: void main() setup(); while(1) loop(); } – frarugi87