Middle+
Pověz mi o vzoru správy gorutin (GMP) v Go.
sobes.tech AI
Odpověď od AI
Plánovač Go spravuje gorutiny, vlákna operačního systému a logické procesory pomocí modelu GMP:
- G (Goroutine): Lehká, nezávislá jednotka vykonávání. Obsahuje zásobník, ukazatel na instrukci a další informace o stavu. Více gorutin může běžet na jednom vlákně OS.
- M (Machine): Vlákno operačního systému. Funguje jako vykonavatel, který spouští kód gorutiny. Sada M může být dostupná plánovači.
- P (Processor): Logický procesor. Poskytuje kontext pro vykonávání gorutiny. Obsahuje místní frontu gorutin připravených k vykonání na tomto M. Výchozí počet P je roven
runtime.NumCPU().
Interakce:
- Vytvoří se gorutina (G) a umístí se do globální nebo místní fronty P.
- Volné M požádá o P. Pokud je P dostupné, M se k němu připojí.
- M vezme gorutinu z místní fronty P a začne její vykonávání.
- Pokud se gorutina zablokuje (například při čekání na I/O), M se odpojí od P ("hand off"). P zůstává dostupné pro jiné M nebo plánuje jinou gorutinu ze své fronty.
- Když je zablokovaná gorutina připravena pokračovat, je znovu umístěna do fronty P nebo do globální fronty.
- M může být vytvořeno plánovačem podle potřeby (například pokud jsou všechny existující M zablokované) nebo odstraněno, když je neaktivní.
Preemption (nucená výměna): Plánovač může přerušit vykonávání gorutiny po stanovené době (time slice), aby zajistil spravedlivé rozdělení času CPU mezi ostatní gorutiny.
Work Stealing (krádež práce): Pokud P vyčerpá gorutiny ve své místní frontě, může se pokusit "ukrást" gorutiny z globální fronty nebo z front jiných P.