Middle+
312
questionbank

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

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Горутина — это легковесный поток выполнения, управляемый средой выполнения Go (runtime). Они мультиплексируются на меньшем количестве системных потоков (тредпул).

Главные компоненты:

  • Стек: Каждая горутина имеет отдельный, расширяемый стек. Изначально небольшой (16KB с Go 1.4+, ранее 8KB), он может увеличиваться или уменьшаться по мере необходимости.
  • Планировщик Go: Реализует модель M:N (M горутин на N системных потоков). Он отвечает за переключение горутин на доступных системных потоках. Переключение происходит при блокирующих операциях (ввод/вывод, ожидание на канале) или явном вызове runtime.Gosched().
  • Контекст: Содержит указатель на машинный код для выполнения, указатель стека и другую метаинформацию, необходимую планировщику.

Начальный размер стека горутины с Go 1.4 составляет 16KB. Этот размер не фиксирован и может динамически изменяться.