Junior — Middle
Môžete vysvetliť princíp fungovania plánovača úloh v jazyku Go a jeho interakciu so systémovými vláknami?
sobes.tech AI
Odpoveď od AI
V jazyku Go je plánovač (scheduler) zodpovedný za správu gorutín, čo sú ľahké vlákna, ktoré sa spúšťajú vo vnútri jedného systémového vlákna (OS thread).
Go používa model M:N, kde M je počet systémových vlákien a N je počet gorutín. Plánovač rozdeľuje gorutiny medzi dostupné systémové vlákna a prepína medzi nimi pre efektívne využitie CPU.
Hlavné komponenty plánovača:
- G (goroutine) — štruktúra reprezentujúca gorutinu.
- M (stroj) — systémové vlákno, na ktorom bežia gorutiny.
- P (procesor) — logický procesor, ktorý spája G a M a riadi vykonávanie.
Princíp fungovania:
- Gorutina (G) je priradená k P.
- P sa spojí s M (systémovým vláknom).
- M vykoná gorutinu.
- Plánovač prepína medzi gorutinami, keď jedna z nich zablokuje (napríklad na vstup/výstup) alebo keď vyprší jej kvantum času.
Toto umožňuje Go efektívne využívať systémové zdroje a zabezpečuje vysokú konkurencieschopnosť bez nutnosti vytvárania mnohých ťažkých systémových vlákien.
Príklad vytvorenia gorutiny:
func main() {
go func() {
fmt.Println("Ahoj z gorutiny")
}()
fmt.Println("Ahoj z hlavného")
time.Sleep(time.Second) // Čaká, aby gorutina mohla dokončiť
}