Что произойдет с программой, если поставить GOMAXPROCS = 1 и запустить горутину с бесконечным циклом, и попытаться выполнить еще часть кода

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

Ответ

При GOMAXPROCS=1 программа будет работать в однопоточном режиме. Бесконечный цикл в горутине заблокирует единственный поток планировщика, не давая выполняться другим горутинам (включая main). Это приведет к зависанию программы.

Пример:

runtime.GOMAXPROCS(1)
go func() {
    for {} // Бесконечный цикл
}()
time.Sleep(time.Second) // Не выполнится
fmt.Println("Этот код никогда не выполнится")

Решение: добавить вызовы runtime.Gosched() в цикл, чтобы дать шанс выполняться другим горутинам.