Sobes.tech
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.