Почему горутин может быть много, а потоков ОС обычно существенно меньше?

В Go количество горутин не соответствует количеству потоков операционной системы, потому что горутины — это легковесные потоки, управляемые рантаймом Go, а не ОС.

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

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

В Go количество горутин не соответствует количеству потоков операционной системы, потому что горутины — это легковесные потоки, управляемые рантаймом Go, а не ОС.

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

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

В Go количество горутин не соответствует количеству потоков операционной системы, потому что горутины — это легковесные потоки, управляемые рантаймом Go, а не ОС.

Основные причины:

  • Мультиплексирование: Рантайм Go распределяет множество горутин на ограниченное число системных потоков, эффективно переключаясь между ними.
  • Легковесность: Создание горутины требует гораздо меньше ресурсов, чем создание системного потока.
  • Планировщик Go: Он управляет выполнением горутин, позволяя тысячам горутин работать на нескольких потоках.

Из-за этого нельзя напрямую сопоставлять число горутин с числом потоков — обычно на один поток приходится множество горутин, что позволяет эффективно использовать ресурсы и упрощает конкурентное программирование.

Пример:

runtime.GOMAXPROCS(4) // Устанавливаем число потоков ОС

for i := 0; i < 1000; i++ {
    go func(id int) {
        fmt.Println("Горутина", id)
    }(i)
}

Здесь 1000 горутин будут работать на 4 потоках ОС.

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

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

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

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