Sobes.tech
Senior

Czym jest gorutyna? Czym różni się od wątku systemowego? Opowiedz o planatorze Go (GMP).

sobes.tech AI

Odpowiedź od AI

Gorutyna to lekkie wątki wykonawcze w języku Go, zarządzane przez środowisko uruchomieniowe Go, a nie przez system operacyjny. W przeciwieństwie do wątku systemowego, gorutyny mają znacznie mniejszy rozmiar stosu (zaczynają od kilku kilobajtów i mogą dynamicznie rosnąć), co pozwala na uruchomienie tysięcy, a nawet milionów gorutyn jednocześnie przy niskich kosztach.

Wątki systemowe są tworzone i planowane przez system operacyjny, mają stały, duży stos i operacje przełączania kontekstu są droższe.

Planer Go opiera się na modelu GMP:

  • G (gorutyna) — sama gorutyna, jednostka wykonawcza.
  • M (maszyna) — wątek systemowy (wątek OS), na którym wykonują się gorutyny.
  • P (procesor) — logiczny procesor, zasób niezbędny do wykonania gorutyny na M.

P zarządza kolejką gotowych do wykonania gorutyn (G). M może wykonywać tylko jedną gorutynę naraz, ale dzięki obecności wielu M i P, planer efektywnie rozdziela gorutyny między wątki systemowe, zapewniając konkurencyjność i równoległość.

Takie podejście pozwala Go efektywnie wykorzystywać zasoby systemowe i skalować na systemach wieloprocesorowych.