Назад к вопросам
Middle+
843
questionbank
Как устроены горутины и сколько памяти они занимают в стеке?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Горутина — это легковесный поток выполнения, управляемый средой выполнения Go (runtime). Они мультиплексируются на меньшем количестве системных потоков (тредпул).
Главные компоненты:
- Стек: Каждая горутина имеет отдельный, расширяемый стек. Изначально небольшой (16KB с Go 1.4+, ранее 8KB), он может увеличиваться или уменьшаться по мере необходимости.
- Планировщик Go: Реализует модель M:N (M горутин на N системных потоков). Он отвечает за переключение горутин на доступных системных потоках. Переключение происходит при блокирующих операциях (ввод/вывод, ожидание на канале) или явном вызове
runtime.Gosched(). - Контекст: Содержит указатель на машинный код для выполнения, указатель стека и другую метаинформацию, необходимую планировщику.
Начальный размер стека горутины с Go 1.4 составляет 16KB. Этот размер не фиксирован и может динамически изменяться.