Как горутина устроена под капотом?

Senior
580 просмотров
AFK Offer AI

Горутина — это пользовательский поток, управляемый рантаймом Go, а не ОС. Начальный стек всего 2-8 КБ (поток ОС — 1-8 МБ), поэтому можно запускать миллионы горутин.

Под капотом модель GMP: G (goroutine) — задача, M (machine) — поток ОС, P (processor) — логический процессор с локальной очередью горутин. По умолчанию P столько, сколько ядер CPU. Каждый P привязан к одному M и берёт горутины из своей очереди. Если очередь пуста — ворует из чужих (work stealing).

Стек горутины растёт динамически: когда не хватает места, рантайм аллоцирует новый стек в 2 раза больше и копирует данные (copyable stacks). Переключение контекста между горутинами стоит ~200ns против ~1-2μs для потоков ОС, потому что не нужен переход в ядро. Состояния горутины: runnable, running, waiting, dead.

Следующий вопрос

Что такое usecase layer?