Как стек используется потоками

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

Ответ

Стек в потоках (горутинах в Go) выделяется индивидуально для каждого потока. Это позволяет потокам хранить локальные переменные, адреса возврата из функций и другие данные вызовов независимо от других потоков.

В Go каждая горутина начинается с небольшого стека (обычно 2KB), который динамически растёт/сжимается по мере необходимости (до 1GB). Это отличается от традиционных потоков ОС, где стек фиксированного размера выделяется заранее.

Пример:

func foo() {
    x := 42 // локальная переменная в стеке горутины
    println(x)
}

func main() {
    go foo() // запуск в новой горутине со своим стеком
    time.Sleep(time.Millisecond)
}