Как устроен runtime в Go?

Senior
1.9k просмотров
AFK Offer AI

Runtime Go — это слой между твоим кодом и ОС. Включает планировщик горутин (GMP), сборщик мусора (concurrent mark-sweep), аллокатор памяти, сетевой поллер (epoll/kqueue), управление стеками. Всё это компилируется прямо в бинарник — нет VM или интерпретатора.

Runtime стартует в runtime.main: инициализирует планировщик, запускает GC, создаёт первую горутину для main.main. Сетевой поллер интегрирован в планировщик — блокирующий I/O не блокирует OS-тред, а паркует горутину.

Runtime также управляет ростом стеков (начинают с 2-8KB, растут по необходимости) и обработкой паник.

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

Как работает append для слайсов?