При каких ситуациях выполнение горутины передает управление другим потокам или задачам?

В Go горутины — это легковесные потоки, которые планируются планировщиком Go. Выполнение горутины может передавать управление другим горутинам в следующих ситуациях:

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

Что ответить на собеседовании

В Go горутины — это легковесные потоки, которые планируются планировщиком Go. Выполнение горутины может передавать управление другим горутинам в следующих ситуациях:

Подробный разбор

Ответ с пояснениями

В Go горутины — это легковесные потоки, которые планируются планировщиком Go. Выполнение горутины может передавать управление другим горутинам в следующих ситуациях:

  • При вызове функции runtime.Gosched(): явно передает управление планировщику, позволяя другим горутинам выполняться.
  • При блокирующих операциях: например, при ожидании канала (<-chan), мьютекса, таймера или другого синхронизирующего примитива горутина блокируется, и планировщик переключается на другую.
  • При системных вызовах или операциям ввода-вывода: если горутина ожидает завершения операции, планировщик может переключиться.
  • При завершении квантов времени: планировщик Go может прервать текущую горутину и переключиться на другую для справедливого распределения процессорного времени.

Таким образом, переключение управления происходит автоматически планировщиком Go, а также может быть вызвано явно через runtime.Gosched() или при блокировках.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее