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

  1. Gorutina (G) je priradená k P.
  2. P sa spojí s M (systémovým vláknom).
  3. M vykoná gorutinu.
  4. 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ť
}