Sobes.tech
Junior — Middle

Jak je v programu prováděno vyvažování běhu gorutin?

sobes.tech AI

Odpověď od AI

Vyvažování provádění gorutin v Go zajišťuje plánovač (scheduler), který je vestavěn do runtime. Plánovač rozděluje gorutiny mezi dostupné systémové vlákna (OS threads) pomocí modelu M:N, kde M je počet vláken a N počet gorutin.

Hlavní body:

  • Existuje mnoho gorutin, jsou lehké a přepínají se bez zásahu OS.
  • Plánovač používá algoritmy podobné kooperativnímu multitaskingu, ale s možností přerušení.
  • Gorutiny jsou přiřazeny k vláknům, a pokud se gorutina zablokuje (například při vstupu/výstupu), plánovač přepne na jinou.

Příklad:

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

Zde plánovač rozdělí 10 gorutin mezi dostupná vlákna, čímž zajistí vyváženost a efektivní využití CPU.