Ответ
Scheduler в Go — это часть рантайма, которая управляет выполнением горутин на потоках ОС (threads). Он работает по кооперативной модели, переключая горутины в определенных точках (например, при вызове каналов, syscalls, или явном вызове runtime.Gosched()).
Основные особенности:
- Использует M:N модель (много горутин на немного потоков ОС)
- Работает в пользовательском пространстве (user-space)
- Не требует вызовов ядра для переключения контекста
Пример:
func main() {
go func() { fmt.Println("Горутина 1") }()
go func() { fmt.Println("Горутина 2") }()
runtime.Gosched() // Даем шанс выполниться другим горутинам
}