Контроль количества одновременно работающих горутин с помощью GOMAXPROCS

GOMAXPROCS(1) не ограничивает число горутин единицей. В обычном современном Go цикл вытесняется, и горутина может напечатать сообщение.

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

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

GOMAXPROCS(1) не ограничивает число горутин единицей. В обычном современном Go цикл вытесняется, и горутина может напечатать сообщение.

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

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

Условие

Определите, какой вывод появится при запуске следующей программы.

func main() {
    runtime.GOMAXPROCS(1)

    go func() {
        fmt.Println("I'm a skilled Go developer")
    }()

    for {
    }
}

Ответ

GOMAXPROCS(1) не ограничивает число горутин единицей. В обычном современном Go цикл вытесняется, и горутина может напечатать сообщение.

GOMAXPROCS ограничивает одновременное исполнение Go-кода на процессорах планировщика, а не количество созданных горутин. Пустой цикл не означает, что другая горутина никогда не получит процессор на поддерживающем асинхронное вытеснение runtime.

Момент вывода не гарантирован; программа после него продолжает бесконечный цикл. Поведение старых runtime и режимов с отключённым вытеснением отличается. Для ожидания используйте канал или WaitGroup: busy loop тратит CPU и не является механизмом синхронизации.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее