В каком случае горутина может быть переключена

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

Ответ

Горутина может быть переключена в следующих случаях:

  1. Блокирующие операции (чтение/запись в канал, системные вызовы, I/O).
  2. Явный вызов runtime.Gosched(), который добровольно отдаёт управление.
  3. При работе с разделяемыми ресурсами (например, мьютексами), если горутина блокируется.
  4. По истечении кванта времени (обычно ~10 мс), если горутина не завершила работу.

Пример:

go func() {
    for i := 0; i < 3; i++ {
        fmt.Println(i)
        runtime.Gosched() // Переключение на другую горутину
    }
}()