> Как планировщик Go распределяет goroutine между потоками (Go)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: InDrive, YADRO, VK
Стек: Go
> Пример ответа
Планировщик Go (GMP-модель) распределяет goroutine между потоками ОС через три ключевых компонента: G (goroutine), M (machine - поток ОС) и P (processor - логический процессор). Каждый P имеет локальную очередь готовых к выполнению goroutine (runqueue), а также существует глобальная очередь. Планировщик использует стратегию work-stealing: когда M, связанный с P, завершает выполнение всех goroutine из своей локальной очереди, он пытается «украсть» половину goroutine из очереди другого P. Если и это не удаётся, M обращается к глобальной очереди или к сетевому поллеру (netpoller) для обработки заблокированных на вводе-выводе goroutine. При системных вызовах, блокирующих поток (например, файловый I/O), планировщик может отсоединить M от P и передать P другому свободному M, чтобы не простаивать процессор. Количество P по умолчанию равно GOMAXPROCS (обычно числу ядер CPU), что ограничивает параллельное выполнение goroutine на уровне потоков ОС.
> Похожие задачи по backend
В чем разница между EXPLAIN и EXPLAIN ANALYZE
Какие средства синхронизации кроме мьютексов используются в Go
Какие примитивы синхронизации существуют кроме каналов в Go
В чем разница реляционных, NoSQL и колоночных баз данных
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью