Junior — Middle
W jaki sposób odbywa się balansowanie wykonywania goroutine w programie?
sobes.tech AI
Odpowiedź od AI
Balansowanie wykonywania goroutine w Go jest realizowane przez planistę (scheduler) wbudowanego w środowisko uruchomieniowe. Planista rozdziela goroutine pomiędzy dostępne wątki systemowe (wątki OS), korzystając z modelu M:N, gdzie M to liczba wątków, a N to liczba goroutine.
Główne punkty:
- Jest wiele goroutine, są lekkie i przełączają się bez udziału systemu operacyjnego.
- Planista używa algorytmów podobnych do kooperatywnego wielozadaniowości, ale z możliwością przerwania.
- Goroutine są przypisywane do wątków, a jeśli goroutine zablokuje się (np. na wejściu/wyjściu), planista przełącza na inną.
Przykład:
func main() {
for i := 0; i < 10; i++ {
go func(id int) {
fmt.Println("Goroutine", id)
}(i)
}
time.Sleep(time.Second) // Czekanie na zakończenie goroutine
}
Tutaj planista rozdzieli 10 goroutine pomiędzy dostępne wątki, zapewniając balans i efektywne wykorzystanie CPU.