Sobes.tech
Middle+

Porozprávaj o vzorec správy gorutín (GMP) v Go.

sobes.tech AI

Odpoveď od AI

Plánovač Go spravuje gorutiny, vlákna operačného systému a logické procesory pomocou modelu GMP:

  • G (Goroutine): Ľahká, nezávislá jednotka vykonávania. Obsahuje zásobník, ukazovateľ na inštrukciu a ďalšie informácie o stave. Viacero gorutín môže bežať na jednom vlákne OS.
  • M (Machine): Vlákno operačného systému. Funguje ako vykonávateľ, ktorý spúšťa kód gorutiny. Sada M môže byť dostupná plánovaču.
  • P (Processor): Logický procesor. Poskytuje kontext pre vykonávanie gorutiny. Obsahuje lokálnu frontu gorutín pripravených na vykonanie na tomto M. Predvolený počet P je rovný runtime.NumCPU().

Interakcia:

  1. Vytvorí sa gorutina (G) a umiestni sa do globálnej alebo lokálnej fronty P.
  2. Voľné M požiadá o P. Ak je P dostupné, M sa k nemu pripojí.
  3. M vezme gorutinu z lokálnej fronty P a začne jej vykonávanie.
  4. Ak gorutina zablokuje (napríklad pri čakaní na I/O), M sa odpojí od P ("hand off"). P zostáva dostupné pre iné M alebo plánuje inú gorutinu zo svojej fronty.
  5. Keď je zablokovaná gorutina pripravená pokračovať, je znovu umiestnená do fronty P alebo do globálnej fronty.
  6. M môže byť vytvorený plánovačom podľa potreby (napríklad, ak sú všetky existujúce M zablokované) alebo odstránený, keď je neaktívny.

Preemption (nútená výmena): Plánovač môže prerušiť vykonávanie gorutiny po stanovenom čase (time slice), aby zabezpečil spravodlivé rozdelenie času CPU medzi ostatné gorutiny.

Work Stealing (krádež práce): Ak P vyčerpá gorutiny vo svojej lokálnej fronte, môže sa pokúsiť "ukradnúť" gorutiny z globálnej fronty alebo z frontov iných P.