Выбор ответа Senior Горутины и планировщик GMP обновлено
Work stealing в планировщике Go
Вопрос
Что делает P, у которого опустела локальная очередь горутин?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Смотрит глобальную очередь и netpoller, затем крадёт половину у другого P. Поиск работы (findRunnable) идёт по порядку: локальная очередь, глобальная, netpoller, затем кража половины локальной очереди у случайно выбранного P.
Варианты ответа
- Сразу засыпает до появления новой горутины в своей очереди
- Завершает свой поток ОС и возвращает P в общий пул
- Смотрит глобальную очередь и netpoller, затем крадёт половину у другого Pправильный ответ
- Забирает все горутины у самого загруженного P
Разбор
Поиск работы (findRunnable) идёт по порядку: локальная очередь, глобальная, netpoller, затем кража половины локальной очереди у случайно выбранного P. Только если ничего не нашлось, M паркуется. Потоки не уничтожаются сразу, а переиспользуются. Забирать всё у одного P было бы несправедливо и создало бы обратный дисбаланс.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.