Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: scheduler, goroutine, gmp

Что означает модель G-P-M в Go?

Вопрос проверяет понимание того, как Go выполняет горутины и как устроен планировщик runtime.

Короткий ответ

Модель G-P-M описывает работу планировщика Go.
G — это goroutine, M — системный поток (machine), P — процессор планировщика, который управляет выполнением горутин. Горутины ставятся в очереди, а P распределяет их между потоками M. Это позволяет эффективно использовать CPU и выполнять тысячи горутин.

Длинный ответ

В Go выполнение кода управляется собственным планировщиком runtime, а не напрямую операционной системой.

Основные компоненты модели

Определение:
Модель G-P-M — это архитектура планировщика Go, в которой выполнение горутин отделено от системных потоков.

1) G — Goroutine

G — это:

  1. функция, выполняемая конкурентно

  2. собственный стек (начально небольшой, растет динамически)

  3. контекст выполнения

Горутины легковесны, поэтому их может быть десятки и сотни тысяч.

2) M — Machine (поток ОС)

M — это:

  1. реальный поток операционной системы

  2. именно он выполняет код на CPU

Без M код выполняться не может, потому что CPU работает с потоками ОС.

3) P — Processor

P — это логический процессор планировщика.

Он содержит:

  1. очередь готовых горутин

  2. контекст выполнения

  3. служебные структуры runtime

Количество P обычно равно GOMAXPROCS.

Как происходит выполнение

Типичный цикл:

  1. goroutine помещается в очередь P

  2. поток M берет goroutine из P

  3. выполняет ее на CPU

  4. при блокировке горутины планировщик переключается на другую

Упрощенная схема:

Goroutines -> P (очередь) -> M -> CPU

Почему нужна именно такая модель

Если бы каждая goroutine была потоком ОС:

  1. огромные накладные расходы

  2. медленное переключение контекста

  3. ограничения ОС

Планировщик Go:

  1. дешевле переключает горутины

  2. лучше масштабируется

  3. позволяет запускать очень много конкурентных задач

Важные детали поведения

Планировщик умеет:

  1. work stealing между P

  2. парковать и будить горутины

  3. освобождать M при блокирующих syscall

Это критично для высокой производительности.

Вывод

Модель G-P-M позволяет отделить горутины от потоков ОС и эффективно планировать выполнение большого числа конкурентных задач.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    8

Навыки

  • Golang

    Golang

Ключевые слова

#scheduler

#goroutine

#gmp

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.