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

  1. Gorutina (G) tiek izveidota un ievietota globālajā vai vietējā P rindā.
  2. Brīvs M pieprasa P. Ja P ir pieejams, M tam pieslēdzas.
  3. M ņem gorutinu no vietējās rindas un sāk to izpildīt.
  4. 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.
  5. Kad bloķētā gorutina ir gatava atsākt, tā tiek atkal ievietota P rindā vai globālajā rindā.
  6. 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.