Какой начальный размер стека у горутины и как он управляется?

Ответ

При создании новой горутины в Go ей выделяется стек небольшого, фиксированного размера. Начиная с Go 1.4, этот размер составляет 2 КБ.

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

  1. Выделяет новый, больший по размеру сегмент памяти (обычно в два раза больше старого).
  2. Копирует содержимое старого стека в новый.
  3. Освобождает старый стек.

Этот механизм позволяет эффективно создавать сотни тысяч и даже миллионы горутин без расходования большого количества памяти на старте. Максимальный размер стека ограничен:

  • 1 ГБ на 64-битных системах.
  • 250 МБ на 32-битных системах.

Важно: В отличие от потоков ОС, где стек обычно имеет фиксированный и большой размер (например, 1-8 МБ), легковесность горутин достигается именно за счет маленького начального стека и его динамического роста.