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