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

В Go планировщик горутин (Goroutine scheduler) распределяет горутины по системным потокам (M), которые, в свою очередь, привязаны к ядрам процессора.

Короткий ответ

Что ответить на собеседовании

В Go планировщик горутин (Goroutine scheduler) распределяет горутины по системным потокам (M), которые, в свою очередь, привязаны к ядрам процессора.

Подробный разбор

Ответ с пояснениями

В Go планировщик горутин (Goroutine scheduler) распределяет горутины по системным потокам (M), которые, в свою очередь, привязаны к ядрам процессора.

Если у вас есть 4 горутины и 4 ядра процессора, то при запуске планировщик может распределить каждую горутину на отдельное ядро, обеспечивая параллельное выполнение. Это возможно при условии, что переменная окружения GOMAXPROCS установлена в 4 (по умолчанию в современных версиях Go она равна количеству доступных ядер).

Пример:

runtime.GOMAXPROCS(4) // устанавливаем число доступных потоков равным 4

for i := 0; i < 4; i++ {
    go func(id int) {
        fmt.Printf("Горутина %d запущена\n", id)
        // работа
    }(i)
}

Планировщик Go будет распределять горутины по потокам, которые могут выполняться на разных ядрах, что позволяет эффективно использовать многопроцессорные системы. Однако точное распределение зависит от загрузки системы и внутреннего планировщика.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку