Sobes.tech
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:

  1. Vytvoří se gorutina (G) a umístí se do globální nebo místní fronty P.
  2. Volné M požádá o P. Pokud je P dostupné, M se k němu připojí.
  3. M vezme gorutinu z místní fronty P a začne její vykonávání.
  4. 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.
  5. Když je zablokovaná gorutina připravena pokračovat, je znovu umístěna do fronty P nebo do globální fronty.
  6. 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.