Middle+
Pastāsti par goroutine pārvaldības modeli (GMP) Go valodā.
sobes.tech AI
Atbilde no AI
Go plānotājs pārvalda gorutinas, operētājsistēmas pavedienus un loģiskos procesorus, izmantojot GMP modeli:
- G (Goroutine): Viegls, neatkarīgs izpildes vienība. Satur steku, instrukcijas norādi un citu stāvokļa informāciju. Daudzas gorutinas var darboties vienā OS pavedienā.
- M (Machine): Operētājsistēmas pavediens. Veic gorutinas kodu izpildi. Daudzi M var būt pieejami plānotājam.
- P (Processor): Loģisks procesors. Nodrošina kontekstu gorutinas izpildei. Satur vietējo gorutinu rindu, kas ir gatavas izpildei uz šo M. P skaits parasti ir vienāds ar
runtime.NumCPU().
Sadarbība:
- Gorutina (G) tiek izveidota un ievietota globālajā vai vietējā P rindā.
- Brīvs M pieprasa P. Ja P ir pieejams, M tam pieslēdzas.
- M ņem gorutinu no vietējās rindas un sāk to izpildīt.
- Ja gorutina tiek bloķēta (piemēram, gaidot I/O), M atvienojas no P („hand off“). P paliek pieejams citam M vai plānotājs plāno citu gorutinu no savas rindas.
- Kad bloķētā gorutina ir gatava atsākt, tā tiek atkal ievietota P rindā vai globālajā rindā.
- M var tikt izveidots plānotāja pēc vajadzības (piemēram, ja visi esošie M ir bloķēti) vai izņemts, kad tas nav aktīvs.
Preemption (pārtraukšana): plānotājs var pārtraukt gorutinas izpildi pēc noteikta laika perioda (time slice), lai nodrošinātu taisnīgu procesora laika sadali citām gorutinam.
Work Stealing (darba zagšana): ja P vietējā rindā ir izsmeltas gorutinas, tas var mēģināt "zagot" gorutinas no globālās rindas vai citu P rindu gorutinas.