2011-09-16 87 views
2

是否有可能創建2個永遠互相呼叫的Ruby Fibers? Ruby最終會因堆棧溢出而崩潰還是Fibers不會消耗堆棧空間?無限紅寶石纖維?

+0

FWIW紅寶石光纖有4k堆棧限制。最近有關於Github的一些討論,關於Rails上的光纖:https://github.com/rails/rails/issues/2153#issuecomment-2109630 – dwhalen

+0

+1爲獲得堆棧溢出問題:) – iain

回答

1

如果您在任何編程語言中編寫無限循環,則某些內容最終會中斷。我不熟悉Ruby Fibers,但是如果他們通過方法互相調用,那麼堆棧將最終溢出。

其他可以在無限循環場景中破解的東西是任何有限資源,所以磁盤空間和網絡帶寬通常是接下來的兩個(網絡因爲通常會超時)。

+2

Infinte循環和無限遞歸通話是不同的。你不清楚這個區別。無限次的調用調用最終會導致堆棧溢出,但通常會使用無限循環,而不會出現任何問題,如GUI應用程序的主循環中。 – sawa

1

恢復光纖不會增加堆疊大小。如果在每次重新開始其他光纖之前遞歸到函數中,堆棧將會增加,直到溢出爲止 - 就像通常無限遞歸一樣。