Как распределятся 4 горутины при их запуске на четырех ядрах

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

Ответ

В Go планировщик (scheduler) автоматически распределяет горутины по доступным потокам ОС (обычно 1 поток на ядро). На 4 ядрах:

  1. По умолчанию Go использует GOMAXPROCS=количество_ядер (в данном случае 4)
  2. Каждая горутина может выполняться на любом ядре
  3. Распределение не гарантировано - зависит от нагрузки и работы планировщика

Пример:

runtime.GOMAXPROCS(4) // Явно задаем (не обязательно)
for i := 0; i < 4; i++ {
    go func() {
        // Работа горутины
    }()
}

Горутины могут:

  • Работать параллельно на разных ядрах
  • Переключаться между ядрами
  • Конкурировать за ресурсы

Для точного контроля распределения нужны низкоуровневые инструменты вроде runtime.LockOSThread()