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.