Sobes.tech
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.