Материал проходит вычитку — возможны неточности.
Урок 64 из 118

Runtime — мини-ОС

После ночного разбора инцидента Сергей устроил команде «урок под капотом». Он показал, что в одном процессе с кодом «Полки» работают аллокатор, сборщик и планировщик. Это была пауза без инцидента.

Главная мысль

программа на Go — это не только твой код: вместе с ним в бинарник вкомпилирован runtime — аллокатор, планировщик, сборщик мусора и сетевой poller, которые работают внутри процесса и невидимы для кода.

Что входит в runtime

Когда ты пишешь x:= 42 или go fetch, за кадром работает целая система. Runtime — набор служб, вкомпилированных в каждый Go-бинарник и запускающихся до твоего кода:

  • Аллокатор — выдаёт память под объекты в куче.
  • Сборщик мусора — находит и возвращает память, которая больше не нужна.
  • Планировщик — превращает десятки тысяч горутин в исполнение на горстке OS-потоков.
  • Network poller — связывает горутины с сетью без блокировки потоков.
  • sysmon — фоновый поток, следящий за здоровьем системы: будит спящих и сигналом инициирует вытеснение зажравшихся горутин (снимает их с исполнения сам планировщик).

Всё это работает внутри процесса, в том же адресном пространстве, что и твой код. Вызовы вроде make, go, операций с каналами — это не магия, а входные точки runtime.

Почему это важно знать

Знание компонентов runtime — не академический интерес. Поведение программы под нагрузкой объясняется именно ими: почему миллион сетевых соединений не съедает миллион потоков (poller), почему внезапная пауза на 2 миллисекунды (GC), почему горутина «подвисла» (планировщик). Дальше по курсу эти компоненты разбираются по одному: планировщик —, poller —, syscall'ы —, escape analysis —, GC —.

В следующем уроке

Вы узнаете:

  • почему Go-бинарники такие толстые
  • что даёт GOMAXPROCS и другие ручки runtime
Задание · вопросы

Проверьте себя

Вопрос 1 из 3

Программа создала миллион слайсов в цикле, но память не растёт бесконечно. Какой компонент runtime это объясняет?

Вопрос 2 из 3

Что верно про runtime Go?

Вопрос 3 из 3

Периодические задержки в несколько миллисекунд у работающего сервиса — какой компонент объясняет?

Итоги

Runtime вкомпилирован и работает до и вокруг твоего кода: аллокатор, GC, планировщик, poller, sysmon. Дальше — каждый компонент отдельным уроком.

Наш сайт собирает куки. Чтобы тебе было удобнее им пользоваться. Нажимая на кнопку, ты даёшь разрешение собирать куки