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:
- Vytvorí sa gorutina (G) a umiestni sa do globálnej alebo lokálnej fronty P.
- Voľné M požiadá o P. Ak je P dostupné, M sa k nemu pripojí.
- M vezme gorutinu z lokálnej fronty P a začne jej vykonávanie.
- 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.
- Keď je zablokovaná gorutina pripravená pokračovať, je znovu umiestnená do fronty P alebo do globálnej fronty.
- 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.