Как стать автором
Обновить

Комментарии 4

Однако есть одна деталь, о которой я до сих пор умалчивал и которая связывает случайное использование рекурсивной функции с серьезной нехваткой памяти у вашей операционной системы, а именно то, что когда Go требуются новые страницы стека, они выделяются из кучи.

Поскольку ваша бесконечная функция продолжает вызывать себя, новые страницы стека выделяются из кучи, что позволяет функции продолжать вызывать себя снова и снова. Довольно быстро размер кучи превысит объем свободной физической памяти на вашем компьютере, и в этот момент подкачка сделает вашу машину непригодной для использования.

Ну т.е. cтек горутины не бесконечен, а ограничен объемом свободной физической памяти?

Ага бесконечен он условно, но это в целом ожидаемо, так как каждый новый фрейм стека не бесплатен (данные всё же нужно где-то хранить) и соответственно рано или поздно ресурсы системы можно и исчерпать.

Ну это очевидно, что он физическим размером ограничен, мне кажется. Речь же не о магии.


Скорее больше вопрос к тому, что переводчик сам написал, что в 2013! году ограничение таки ввели. Тогда немного теряется смысл современного перевода

Во-первых, она хоть и слегка устарела, но всё же рассказывает немного о том, что там происходит внутри го со стеком. Во-вторых, у Дейва есть ещё несколько статьей, которые ссылаются на текущую — так что мне показалось правильным перевести старую статью, чтобы лишний раз не ссылаться из перевода на англоязычные материалы.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий