Sobes.tech
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.