Sobes.tech
Назад к вопросам
Junior — Middle
77

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

Компании, где спрашивали
kode.ru

Ответ от нейросети

sobes.tech AI

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

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

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