Junior — Middle
Aké dôsledky bude mať na chod programu nastavenie GOMAXPROCS na 1 a spustenie nekonečnej gorutiny?
sobes.tech AI
Odpoveď od AI
Nastavenie GOMAXPROCS na 1 obmedzuje počet operácií systému, ktoré môže plánovač Go použiť, na jeden vlákno. Ak v tomto scenári spustíte nekonečnú gorutínu:
- Všetky výpočty budú vykonávané sekvenčne na jednom vlákne.
- Ak nekonečná gorutína neobsahuje body, kde dochádza ku kontextovým zmenám (napríklad volania blokujúcich operácií alebo
runtime.Gosched()), iné gorutiny nemusia získať čas na vykonanie, čo povedie k "zamrznutiu" programu. - Výsledkom môže byť, že program prestane reagovať alebo bude veľmi pomaly fungovať, pretože plánovač nebude schopný efektívne prepínať medzi gorutinami.
Príklad:
package main
import (
"runtime"
"time"
"fmt"
)
func main() {
runtime.GOMAXPROCS(1)
go func() {
for {
// nekonečný cyklus bez volania runtime.Gosched()
}
}()
time.Sleep(time.Second)
fmt.Println("Program ukončený")
}
V tomto príklade hlavná gorutina nemusí získať čas na vykonanie, ak nekonečná gorutina neodovzdá kontrolu, čo povedie k "zamrznutiu" programu.