Какой максимальный стек у горутин

«Какой максимальный стек у горутин» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Максимальный размер стека горутины в Go зависит от версии и ОС:

  1. В Go 1.2+ размер стека начинается с 2 КБ (на 32-битных системах) или 4 КБ (на 64-битных)
  2. Стек может динамически расти до 1 ГБ (на 64-битных системах) или 250 МБ (на 32-битных)

Пример проверки текущего размера:

var stackSize = 8 * 1024 * 1024 // 8MB
func main() {
    var buf [stackSize]byte
    // Использование buf предотвращает оптимизацию
    runtime.KeepAlive(buf)
}

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