Почему можно запустить большое количество горутин на Go, а на других языках нет

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

Ответ

Горутины — это легковесные потоки, управляемые рантаймом Go, а не ОС. Они потребляют меньше памяти (стек ~2 КБ, динамически растёт) и быстро переключаются. В отличие от системных потоков (1 МБ стек, дорогое переключение), Go-рантайм эффективно планирует горутины на небольшом числе системных потоков (GOMAXPROCS).

Пример:

for i := 0; i < 100_000; i++ {
    go func(id int) {
        fmt.Println(id)
    }(i)
}

Работает, потому что:

  1. Нет накладных расходов на создание потока ОС.
  2. Планировщик Go кооперативный (не вытесняющий), минимизирует contention.
  3. Сборщик мусора оптимизирован под высокую concurrenсy.

В других языках аналоги (корутины) требуют ручного управления или имеют ограничения рантайма.