Можно ли создать 2 волокна Ruby, которые вечно будут звать друг друга? Произойдет ли сбой Ruby из-за переполнения стека или Fibers не будут занимать место в стеке?
Бесконечные рубиновые волокна?
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
Бесконечный цикл и бесконечные рекурсивные вызовы разные. Вам непонятно это различие. Бесконечные ресурсные вызовы в конечном итоге вызовут переполнение стека, но бесконечный цикл регулярно используется без каких-либо проблем, например, в основном цикле приложения с графическим интерфейсом.
- person sawa; 25.05.2013
Возобновление волокна не увеличивает размер стека. Если вы рекурсивно переходили в функцию каждый раз перед тем, как возобновить работу с другим волокном, стек будет увеличиваться до переполнения - так же, как это обычно происходит с бесконечной рекурсией.
person
Steve Dekorte
schedule
25.05.2013