Middle+
Jak są zbudowane goroutines i ile pamięci zajmują na stosie?
sobes.tech AI
Odpowiedź od AI
Gorutyna to lekkie wątki wykonywalne zarządzane przez środowisko wykonawcze Go (runtime). Są one multipleksowane na mniejszej liczbie wątków systemowych (pula wątków).
Główne komponenty:
- Stos: Każda gorutyna ma oddzielny, rozszerzalny stos. Początkowo jest mały (16KB z Go 1.4+, wcześniej 8KB), może się zwiększać lub zmniejszać w razie potrzeby.
- Planista Go: Implementuje model M:N (M gorutyn na N wątków systemowych). Odpowiada za przełączanie gorutyn na dostępnych wątkach systemowych. Przełączanie następuje podczas operacji blokujących (wejście/wyjście, oczekiwanie na kanał) lub wywołania jawnego
runtime.Gosched(). - Kontekst: Zawiera wskaźnik na kod maszynowy do wykonania, wskaźnik na stos i inne metadane niezbędne planistowi.
Początkowy rozmiar stosu gorutyny od Go 1.4 wynosi 16KB. Rozmiar ten nie jest stały i może się dynamicznie zmieniać.