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.