GOMAXPROCS(1) не ограничивает число горутин единицей. В обычном современном Go цикл вытесняется, и горутина может напечатать сообщение.
Контроль количества одновременно работающих горутин с помощью GOMAXPROCS
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 и не является механизмом синхронизации.