Выбор ответа Senior Горутины и планировщик GMP обновлено

Work stealing в планировщике Go

Вопрос

Что делает P, у которого опустела локальная очередь горутин?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Смотрит глобальную очередь и netpoller, затем крадёт половину у другого P. Поиск работы (findRunnable) идёт по порядку: локальная очередь, глобальная, netpoller, затем кража половины локальной очереди у случайно выбранного P.

Варианты ответа

  1. Сразу засыпает до появления новой горутины в своей очереди
  2. Завершает свой поток ОС и возвращает P в общий пул
  3. Смотрит глобальную очередь и netpoller, затем крадёт половину у другого Pправильный ответ
  4. Забирает все горутины у самого загруженного P

Разбор

Поиск работы (findRunnable) идёт по порядку: локальная очередь, глобальная, netpoller, затем кража половины локальной очереди у случайно выбранного P. Только если ничего не нашлось, M паркуется. Потоки не уничтожаются сразу, а переиспользуются. Забирать всё у одного P было бы несправедливо и создало бы обратный дисбаланс.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.