Junior — Middle
Puteți explica cum este implementat mecanismul planificatorului de sarcini în sistem?
sobes.tech AI
Răspuns de la AI
În Go, planificatorul (scheduler) este implementat ca parte a runtime-ului și se ocupă de gestionarea goroutine-urilor, care sunt fire ușoare. Principii de bază:
- Există mai multe fire de sistem (M), pe care rulează goroutine-uri (G).
- Planificatorul le leagă pe goroutine-uri de fire prin intermediul obiectelor P (processor), care gestionează cozile de goroutine-uri gata de executat.
- Goroutine-urile sunt plasate în coadă, iar planificatorul alege următoarea pentru execuție.
- Dacă o goroutine se blochează (de exemplu, la intrare/ieșire), planificatorul trece la alta.
Exemplu de creare și rulare a unei goroutine:
package main
import (
"fmt"
"time"
)
func task(id int) {
fmt.Printf("Sarcina %d a început\n", id)
time.Sleep(time.Second)
fmt.Printf("Sarcina %d a terminat\n", id)
}
func main() {
for i := 1; i <= 3; i++ {
go task(i) // pornește o goroutine
}
time.Sleep(2 * time.Second) // așteaptă finalizarea
}
Astfel, planificatorul Go distribuie eficient execuția mai multor goroutine-uri pe un număr limitat de fire de sistem, asigurând concurență și paralelism.