Back to questions
Junior — Middle
87
Какие последствия возникнут в работе программы при установке GOMAXPROCS равным 1 и запуске бесконечной горутины?
Answer from AI
sobes.tech AI
Установка GOMAXPROCS в значение 1 ограничивает количество операционных системных потоков, которые может использовать планировщик Go, одним потоком. Если при этом запустить бесконечную горутину, то:
- Все вычисления будут выполняться последовательно в одном потоке.
- Если бесконечная горутина не содержит точек, где происходит переключение контекста (например, вызовы блокирующих операций или
runtime.Gosched()), то другие горутины могут не получить времени на выполнение, что приведёт к «зависанию» программы. - В итоге программа может перестать отвечать или работать очень медленно, так как планировщик не сможет эффективно переключаться между горутинами.
Пример:
package main
import (
"runtime"
"time"
"fmt"
)
func main() {
runtime.GOMAXPROCS(1)
go func() {
for {
// бесконечный цикл без вызова runtime.Gosched()
}
}()
time.Sleep(time.Second)
fmt.Println("Программа завершена")
}
В этом примере основная горутина может не получить времени на выполнение, если бесконечная горутина не уступает управление, что приведёт к зависанию.