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.