Что такое starvation локальной очереди и когда она возникает
Что проверяют
Знаете ли вы планировщик Go изнутри, а не общую теорию операционных систем про приоритеты. Приоритетов у горутин нет вовсе, поэтому учебниковое определение голодания здесь не подходит: спрашивают про конкретные места рантайма, где готовая горутина долго не получает процессор.
Как отвечать
У каждого P есть локальная очередь готовых горутин: кольцевой буфер на 256 мест плюс отдельный слот runnext. Горутина из runnext запускается следующей в обход очереди, потому что её только что разбудили и данные ещё в кэше. Отсюда и голодание локальной очереди: если две горутины будят друг друга, они бесконечно перекидываются через runnext, а хвост очереди не двигается.
Рантайм защищается несколькими механизмами, и их стоит назвать:
горутина, подхваченная из runnext, донашивает остаток кванта предыдущей, а не получает свои десять миллисекунд, поэтому пинг-понг не растягивается бесконечно; каждый шестьдесят первый такт планировщик заглядывает в глобальную очередь, иначе она не разбиралась бы, пока локальная непуста; простаивающий P крадёт половину чужой локальной очереди; sysmon снимает горутину, занявшую поток дольше кванта, и отбирает P у той, что зависла в системном вызове.
Полезно отличать это от режима голодания у sync.Mutex: там мьютекс переключается в честную выдачу, когда ожидающий не может захватить его дольше миллисекунды.
Где спотыкаются
Пересказывают главу про fair scheduling и приоритеты потоков. В Go приоритетов нет, планировщик кооперативный с вытеснением по сигналу, и ответ уходит мимо вопроса.
Считают, что горутина отдаёт управление сама в любой момент. Точка переключения нужна явная, и именно поэтому появилось асинхронное вытеснение: тугой цикл без вызовов функций раньше держал свой P и мог задержать даже старт сборки мусора.
Путают голодание с взаимной блокировкой. При дедлоке не двигается никто и рантайм иногда способен это заметить, при голодании система работает штатно, просто часть горутин не получает времени, и никакой детектор об этом не сообщит.