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ć
}