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

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

2 ответа

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

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

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

Другие вопросы по тегам