Sobes.tech
Junior — Middle

Czym różni się wykonywanie kodu w goroutine od pracy wątku systemowego na poziomie systemu operacyjnego?

sobes.tech AI

Odpowiedź od AI

Gorutyny w Go to lekkie wątki zarządzane przez środowisko uruchomieniowe Go, a nie przez system operacyjny. Główne różnice:

  • Lekkość: Gorutyny zajmują bardzo mało pamięci (zwykle kilka kilobajtów stosu), podczas gdy wątki systemowe wymagają znacznie więcej zasobów.
  • Planowanie: Planer gorutyn jest wbudowany w środowisko uruchomieniowe Go i rozdziela gorutyny pomiędzy wątki systemowe, co pozwala na efektywne wykorzystanie CPU.
  • Tworzenie i przełączanie: Tworzenie i przełączanie między gorutynami jest szybsze niż między wątkami systemowymi, ponieważ nie wymaga zmiany kontekstu jądra OS.

Przykład:

func main() {
    go func() {
        fmt.Println("Gorutyna")
    }()
    fmt.Println("Główny wątek")
    time.Sleep(time.Second) // Czekanie na zakończenie gorutyny
}

Tutaj gorutyna jest uruchamiana w ramach procesu, ale nie odpowiada bezpośrednio odrębnemu wątkowi systemowemu.