Sobes.tech
Middle+

Papaskok apie gorutinių valdymo modelį (GMP) Go kalboje.

sobes.tech AI

Atsakymas iš AI

Go planuotojas valdo gorutinas, operacinės sistemos srautus ir loginus procesorius, naudodamas GMP modelį:

  • G (Goroutine): Lengvas, nepriklausomas vykdymo vienetas. Jame yra stekas, instrukcijos rodyklė ir kita būsenos informacija. Daug gorutinų gali dirbti viename OS sraute.
  • M (Machine): Operacinės sistemos srautas. Atlieka gorutinos kodo vykdymą. Daug M gali būti prieinami planuotojui.
  • P (Processor): Loginis procesorius. Teikia kontekstą gorutinos vykdymui. Jame yra vietinis gorutinų eilė, kurie yra pasiruošę vykdyti šį M. P skaičius paprastai yra lygus runtime.NumCPU().

Sąveika:

  1. Gorutina (G) yra sukurta ir įdedama į globalią arba vietinę P eilę.
  2. Laisvas M prašo P. Jei P yra prieinama, M prie jos prisijungia.
  3. M paima gorutiną iš vietinės eilės ir pradeda ją vykdyti.
  4. Jei gorutina užstringa (pvz., laukia I/O), M atjungiasi nuo P („hand off“). P lieka prieinama kitam M arba planuoja kitą gorutiną savo eilėje.
  5. Kai užstringanti gorutina yra pasiruošusi tęsti, ji vėl įdedama į P eilę arba į globalią eilę.
  6. M gali būti sukurtas planuotojo, jei reikia (pvz., jei visi esami M yra užstringę), arba pašalintas, kai nėra aktyvus.

Preemption (priverstinis perjungimas): planuotojas gali nutraukti gorutinos vykdymą po tam tikro laiko (time slice), siekiant užtikrinti teisingą procesoriaus laiko paskirstymą kitoms gorutinoms.

Work Stealing (darbo vagystė): jei P vietinė eilė yra tuščia, jis gali bandyti „vagystę“ iš globalios eilės arba kitų P eilės gorutinų.