Бесконечные рубиновые волокна?

Можно ли создать 2 волокна Ruby, которые вечно будут звать друг друга? Произойдет ли сбой Ruby из-за переполнения стека или Fibers не будут занимать место в стеке?


person Eli Schneider    schedule 16.09.2011    source источник
comment
FWIW Ruby волокна имеют предел стека 4k. Недавно на Github было обсуждение волокон на Rails: github.com/rails / rails / issues / 2153 # issuecomment-2109630   -  person dwhalen    schedule 16.09.2011
comment
+1 за переполнение стека в вопрос :)   -  person iain    schedule 25.05.2013


Ответы (2)


Если вы напишете бесконечный цикл на любом языке программирования, что-то в конечном итоге сломается. Я не знаком с Ruby Fibers, но если они вызывают друг друга с помощью методов, то в конечном итоге стек переполнится.

Другие вещи, которые могут выйти из строя в сценарии бесконечного цикла, - это все, что является ограниченным ресурсом, поэтому дисковое пространство и пропускная способность сети обычно являются следующими двумя (сеть, потому что обычно истекает время ожидания).

person cdeszaq    schedule 16.09.2011
comment
Бесконечный цикл и бесконечные рекурсивные вызовы разные. Вам непонятно это различие. Бесконечные ресурсные вызовы в конечном итоге вызовут переполнение стека, но бесконечный цикл регулярно используется без каких-либо проблем, например, в основном цикле приложения с графическим интерфейсом. - person sawa; 25.05.2013

Возобновление волокна не увеличивает размер стека. Если вы рекурсивно переходили в функцию каждый раз перед тем, как возобновить работу с другим волокном, стек будет увеличиваться до переполнения - так же, как это обычно происходит с бесконечной рекурсией.

person Steve Dekorte    schedule 25.05.2013