В какой момент происходит переключение горутин

«В какой момент происходит переключение горутин» — вопрос из категории Golang, который задают на 24% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Переключение горутин в Go происходит в точках, где горутина добровольно уступает контроль. Это случается при:

  1. Вызове runtime.Gosched()
  2. Операциях с каналами (чтение/запись)
  3. Системных вызовах (например, I/O)
  4. Вызове time.Sleep()
  5. В конце выполнения горутины

Планировщик Go не вытесняет горутины насильно (как в ОС), а полагается на кооперативную многозадачность. Пример:

go func() {
    fmt.Println("Горутина 1")
    runtime.Gosched() // Явное переключение
    fmt.Println("Горутина 1 продолжает")
}()

Важно: горутины не привязаны к потокам ОС и могут переключаться между ними.