2011-09-16 5 views
2

2つのRuby's Fibersを永遠に呼び出すことは可能ですか?スタックオーバーフローでRubyがクラッシュするか、Fibersがスタックスペースを消費しないのですか?無限ルビーファイバー?

+0

FWIW Rubyファイバのスタック制限は4kです。最近では、Rails上のファイバーに関するGithubに関するいくつかの議論があります:https://github.com/rails/rails/issues/2153#issuecomment-2109630 – dwhalen

+0

+1質問にスタックオーバーフローが発生しました。 – iain

答えて

1

プログラミング言語がの場合、に無限ループを書き込むと、何かが途絶えるでしょう。私はRuby Fibersに慣れていませんが、メソッドを介してお互いを呼び出す場合、スタックは最終的にオーバーフローします。

無限ループシナリオで壊れる可能性のあるその他のものは、リソースが限られているため、ディスクスペースとネットワーク帯域幅は通常次の2つです(通常はタイムアウトするためネットワークです)。

+2

Infinteループと無限再帰コールは異なります。あなたはこの区別についてはっきりしていません。無限の再帰呼び出しは最終的にスタックオーバーフローを引き起こしますが、無限ループはGUIアプリケーションのメインループのような問題なしに定期的に使用されます。 – sawa

1

ファイバを再開してもスタックサイズは増加しません。あなたが他のファイバーを再開する前に関数に再帰した場合、スタックはオーバーフローするまで増加します - 通常は無限再帰と同様です。