2011-09-16 73 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

恢复光纤不会增加堆叠大小。如果在每次重新开始其他光纤之前递归到函数中,堆栈将会增加,直到溢出为止 - 就像通常无限递归一样。