Junior — Middle
In welke gevallen worden taken in goroutines geplaatst in de gedeelde wachtrij van de uitvoerder?
sobes.tech AI
Antwoord van AI
In Go worden taken (goroutines) in de volgende gevallen in de uitvoeringswachtrij (run queue) geplaatst:
- Wanneer een goroutine wordt gemaakt met
goen klaar is voor uitvoering, wordt deze in de wachtrij van de planner geplaatst. - Als de goroutine wordt geblokkeerd (bijvoorbeeld bij invoer/uitvoer-operaties, kanalen of synchronisatie) en daarna wordt ontgrendeld, keert deze terug naar de wachtrij.
- Bij het voltooien van de huidige goroutine kiest de planner de volgende uit de wachtrij.
De Go-planner gebruikt een M:N-model, waarbij M de systeemthreads zijn en N de goroutines. Er zijn veel goroutines, die via wachtrijen over de threads worden verdeeld. De wachtrij van de planner is een structuur waarin de klaar-voor-uitvoering goroutines worden opgeslagen.
Voorbeeld:
func main() {
go func() {
fmt.Println("Goroutine gestart")
}()
time.Sleep(time.Second) // Wachten zodat de goroutine kan uitvoeren
}
Hier wordt de goroutine na creatie in de wachtrij van de planner geplaatst voor uitvoering.