Sobes.tech
Junior — Middle

Czy liczba tworzonych gorutyn jest powiązana z liczbą rdzeni w procesorze?

sobes.tech AI

Odpowiedź od AI

Liczba tworzonych gorutyn w Go nie jest bezpośrednio powiązana z liczbą rdzeni procesora. Możesz tworzyć ich bardzo dużo — są to lekkie wątki zarządzane przez środowisko uruchomieniowe Go, a ich liczba jest głównie ograniczona przez dostępną pamięć i logikę programu.

Liczba rdzeni wpływa na liczbę wątków systemu operacyjnego, które mogą działać jednocześnie, oraz na parametr GOMAXPROCS, który ustawia maksymalną liczbę wątków wykonujących goroutine równolegle. Jednak liczba goroutine zwykle znacznie przewyższa liczbę rdzeni, ponieważ są one efektywnie planowane i przełączane w ramach środowiska uruchomieniowego.

Przykład:

runtime.GOMAXPROCS(4) // Używamy 4 rdzeni

for i := 0; i < 1000; i++ {
    go func(n int) {
        fmt.Println("Goroutine", n)
    }(i)
}
time.Sleep(time.Second)

Tutaj tworzone jest 1000 goroutine, podczas gdy dostępne są tylko 4 rdzenie.