Junior — Middle
În ce cazuri sarcinile din goroutines sunt plasate în coada comună a planificatorului de execuție?
sobes.tech AI
Răspuns de la AI
În Go, sarcinile (goroutine-urile) sunt plasate în coada generală a planificatorului de execuție (run queue) în următoarele cazuri:
- Când o goroutine este creată cu
goși este gata pentru execuție, ea este plasată în coada planificatorului. - Dacă goroutine-ul se blochează (de exemplu, la operații de intrare/ieșire, canale sau sincronizare) și apoi deblochează, ea revine în coadă.
- La finalizarea goroutine-ului curent, planificatorul alege următorul din coadă.
Planificatorul Go folosește un model M:N, unde M sunt firele de sistem și N sunt goroutine-urile. Există multe goroutine-uri, care sunt distribuite pe fire prin intermediul cozii. Coada planificatorului este o structură în care sunt stocate goroutine-urile gata de executat.
Exemplu:
func main() {
go func() {
fmt.Println("Goroutine pornită")
}()
time.Sleep(time.Second) // Așteptăm pentru ca goroutine-ul să se execute
}
Aici, după crearea, goroutine-ul este plasat în coada planificatorului pentru execuție.