Sobes.tech
Junior — Middle

Ako sa v programe vykonáva vyvažovanie gorutín?

sobes.tech AI

Odpoveď od AI

Vyvažovanie vykonávania goroutine v Go je zabezpečené plánovačom (scheduler), ktorý je zabudovaný v runtime. Plánovač rozdeľuje goroutine medzi dostupné systémové vlákna (OS threads) pomocou modelu M:N, kde M je počet vlákien a N počet goroutine.

Hlavné body:

  • Existuje veľa goroutine, sú ľahké a prepínajú sa bez zásahu OS.
  • Plánovač používa algoritmy podobné kooperatívnemu multitaskingu, ale s možnosťou prerušenia.
  • Goroutine sú priradené k vláknam, a ak sa goroutine zablokuje (napríklad pri vstupe/výstupe), plánovač prejde na inú.

Príklad:

func main() {
    for i := 0; i < 10; i++ {
        go func(id int) {
            fmt.Println("Goroutine", id)
        }(i)
    }
    time.Sleep(time.Second) // Čaká na dokončenie goroutine
}

Tu plánovač rozdelí 10 goroutine medzi dostupné vlákna, zabezpečujúc vyváženosť a efektívne využitie CPU.