Sobes.tech
Senior

Czym jest gorutyna? Jak jest zorganizowana?

sobes.tech AI

Odpowiedź od AI

Gorutyna to lekkie wątki wykonawcze w języku Go. W przeciwieństwie do systemowych wątków, gorutyny są zarządzane przez środowisko uruchomieniowe Go i mają bardzo mały stos (zaczyna się od kilku kilobajtów i może się dynamicznie powiększać). Pozwala to na uruchomienie setek tysięcy gorutyn jednocześnie przy niskich kosztach narzutu.

Struktura gorutyny:

  • Podczas tworzenia gorutyny (za pomocą operatora go) planista Go umieszcza ją w kolejce zadań gotowych do wykonania.
  • Środowisko uruchomieniowe Go używa planowania M:N: M wątków systemowych (wątków OS) obsługuje N gorutyn.
  • Gorutyny przełączają kontekst na poziomie środowiska uruchomieniowego, co jest szybsze niż przełączanie wątków systemowych.
  • Każdy wątek (M) może wykonywać wiele gorutyn (N), przełączając się między nimi w przypadku blokad lub w razie potrzeby.

Przykład tworzenia gorutyny:

func sayHello() {
    fmt.Println("Cześć z gorutyny")
}

func main() {
    go sayHello() // uruchamiamy gorutynę
    time.Sleep(time.Second) // czekamy, aby gorutyna zdążyła się wykonać
}