Ответ
При создании новой горутины в Go ей выделяется стек небольшого, фиксированного размера. Начиная с Go 1.4, этот размер составляет 2 КБ.
Ключевая особенность Go — динамическое управление стеком. Если в процессе работы горутине не хватает места в стеке (например, из-за глубокой рекурсии или вызова множества функций), среда выполнения Go автоматически:
- Выделяет новый, больший по размеру сегмент памяти (обычно в два раза больше старого).
- Копирует содержимое старого стека в новый.
- Освобождает старый стек.
Этот механизм позволяет эффективно создавать сотни тысяч и даже миллионы горутин без расходования большого количества памяти на старте. Максимальный размер стека ограничен:
- 1 ГБ на 64-битных системах.
- 250 МБ на 32-битных системах.
Важно: В отличие от потоков ОС, где стек обычно имеет фиксированный и большой размер (например, 1-8 МБ), легковесность горутин достигается именно за счет маленького начального стека и его динамического роста.