Sobes.tech
Junior — Middle

Jak odbywa się rozdział czterech goroutines na cztery rdzenie procesora podczas ich uruchomienia?

sobes.tech AI

Odpowiedź od AI

W Go, planista gorutyn (Goroutine scheduler) rozdziela gorutiny pomiędzy wątki systemowe (M), które z kolei są powiązane z rdzeniami procesora.

Jeśli masz 4 gorutiny i 4 rdzenie procesora, to podczas uruchomienia planisty, może on rozdzielić każdą gorutynę na osobny rdzeń, zapewniając równoległe wykonanie. Jest to możliwe, jeśli zmienna środowiskowa GOMAXPROCS jest ustawiona na 4 (domyślnie, w nowoczesnych wersjach Go, jest równa liczbie dostępnych rdzeni).

Przykład:

runtime.GOMAXPROCS(4) // ustawia liczbę dostępnych wątków na 4

for i := 0; i < 4; i++ {
    go func(id int) {
        fmt.Printf("Gorutyna %d uruchomiona\n", id)
        // praca
    }(i)
}

Planista Go będzie rozdzielał gorutiny pomiędzy wątki, które mogą być wykonywane na różnych rdzeniach, co pozwala na efektywne wykorzystanie systemów wieloprocesorowych. Jednak dokładne rozdzielenie zależy od obciążenia systemu i wewnętrznego planisty.