Что такое переключение контекста

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

Ответ

Переключение контекста — это процесс сохранения состояния текущей горутины (стек, регистры) и восстановления состояния другой. В Go это происходит при блокирующих операциях (каналы, системные вызовы) или при вызове runtime.Gosched(). Планировщик Go управляет горутинами в пользовательском пространстве, минимизируя дорогостоящие переключения потоков ОС.

Пример:

func main() {
    go func() {
        fmt.Println("Горутина 1")
    }()
    go func() {
        fmt.Println("Горутина 2")
    }()
    time.Sleep(time.Millisecond) // Принудительное переключение контекста
}

Планировщик сам решает, когда переключаться, но Sleep или операции с каналами могут спровоцировать переключение.