Ответ
Переключение контекста — это процесс сохранения состояния текущей горутины (стек, регистры) и восстановления состояния другой. В Go это происходит при блокирующих операциях (каналы, системные вызовы) или при вызове runtime.Gosched(). Планировщик Go управляет горутинами в пользовательском пространстве, минимизируя дорогостоящие переключения потоков ОС.
Пример:
func main() {
go func() {
fmt.Println("Горутина 1")
}()
go func() {
fmt.Println("Горутина 2")
}()
time.Sleep(time.Millisecond) // Принудительное переключение контекста
}
Планировщик сам решает, когда переключаться, но Sleep или операции с каналами могут спровоцировать переключение.