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.