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.