Junior — Middle
Hoe wordt de balansering van de uitvoering van goroutines in een programma uitgevoerd?
sobes.tech AI
Antwoord van AI
De balansering van de uitvoering van goroutines in Go wordt uitgevoerd door de scheduler (planner) ingebouwd in de runtime. De scheduler verdeelt de goroutines over de beschikbare systeemthreads (OS-threads), gebruikmakend van een M:N-model, waarbij M het aantal threads is en N het aantal goroutines.
Belangrijke punten:
- Er zijn veel goroutines, ze zijn lichtgewicht en schakelen zonder tussenkomst van het besturingssysteem.
- De scheduler gebruikt algoritmen die lijken op coöperatief multitasken, maar met de mogelijkheid tot onderbreking.
- Goroutines worden toegewezen aan threads, en als een goroutine blokkeert (bijvoorbeeld bij invoer/uitvoer), schakelt de scheduler naar een andere.
Voorbeeld:
func main() {
for i := 0; i < 10; i++ {
go func(id int) {
fmt.Println("Goroutine", id)
}(i)
}
time.Sleep(time.Second) // Wacht tot alle goroutines klaar zijn
}
Hier zal de scheduler 10 goroutines verdelen over de beschikbare threads, wat zorgt voor een goede balans en efficiënt gebruik van de CPU.