Junior — Middle
Welke gevolgen heeft het voor de werking van het programma als GOMAXPROCS op 1 wordt gezet en een oneindige goroutine wordt gestart?
sobes.tech AI
Antwoord van AI
Het instellen van GOMAXPROCS op 1 beperkt het aantal besturingssysteemthreads dat de Go-scheduler kan gebruiken tot één thread. Als in dit scenario een oneindige goroutine wordt gestart:
- Alle berekeningen worden sequentieel uitgevoerd op één thread.
- Als de oneindige goroutine geen punten bevat waar een contextswitch plaatsvindt (bijvoorbeeld door blokkerende operaties of
runtime.Gosched()), kunnen andere goroutines geen uitvoertijd krijgen, wat leidt tot een "vastgelopen" programma. - Als gevolg kan het programma niet meer reageren of heel langzaam werken, omdat de scheduler niet effectief tussen goroutines kan schakelen.
Voorbeeld:
package main
import (
"runtime"
"time"
"fmt"
)
func main() {
runtime.GOMAXPROCS(1)
go func() {
for {
// oneindige lus zonder aanroep van runtime.Gosched()
}
}()
time.Sleep(time.Second)
fmt.Println("Programma beëindigd")
}
In dit voorbeeld kan de hoofd-goroutine geen tijd krijgen om uit te voeren als de oneindige goroutine geen controle overgeeft, wat leidt tot een vastgelopen programma.