Czym są goroutines i jak są zbudowane od środka?
sobes.tech AI
Odpowiedź od AI
Goroutines to lekkie wątki wykonawcze w Go, zarządzane przez środowisko uruchomieniowe języka, a nie przez system operacyjny. W przeciwieństwie do wątków systemowych, goroutines mają bardzo mały stos (zaczynający się od kilku kilobajtów) i mogą się dynamicznie rozszerzać.
Wewnątrz goroutine jest reprezentowana przez strukturę g (goroutine), która zawiera stan, stos, rejestry i inne informacje. Planista Go (scheduler) zarządza przełączaniem między goroutines, używając modelu M:N, gdzie M to wątki systemowe (wątki OS), a N to goroutines.
Planista rozdziela goroutines pomiędzy wątki systemowe, umożliwiając efektywne korzystanie z wieloprocesowości bez kosztów związanych z tworzeniem i przełączaniem wątków OS. Osiąga się to poprzez kooperatywne i preemptive multitasking w ramach środowiska uruchomieniowego.
Przykład tworzenia goroutine:
func sayHello() {
fmt.Println("Cześć z goroutine")
}
func main() {
go sayHello() // uruchom goroutine
time.Sleep(time.Second) // dajemy czas goroutine na wykonanie
}