Sobes.tech
Junior — Middle

Wat gebeurt er met een goroutine wanneer deze blokkeert tijdens het uitvoeren van een proces of operatie?

sobes.tech AI

Antwoord van AI

Wanneer een goroutine in Go blokkeert op een operatie (bijvoorbeeld lezen uit een kanaal, wachten op synchronisatie, invoer-uitvoer), wordt deze gepauzeerd en geeft de Go-planner de systeemthread vrij om andere goroutines uit te voeren. Dit maakt efficiënt gebruik van systeembronnen mogelijk en schaalt de paralleliteit.

Dat wil zeggen, een blokkerende operatie blokkeert niet de hele OS-thread, maar alleen de specifieke goroutine. De planner schakelt over op andere goroutines die klaar zijn om uit te voeren.

Voorbeeld:

ch := make(chan int)
func() {
    val := <-ch // goroutine wordt geblokkeerd totdat een waarde wordt ontvangen
    fmt.Println(val)
}()
ch <- 42 // ontgrendelt de goroutine

In dit voorbeeld wordt de goroutine geblokkeerd bij het lezen uit het kanaal, maar de planner staat andere goroutines toe te werken terwijl ze wachten.