Sobes.tech
Middle+

Räägi Go keeles goroutine'i haldamise mustrist (GMP).

sobes.tech AI

Vastus AI-lt

Go planeer juhib gorutinasid, operatsioonisüsteemi niidud ja loogilisi protsessoreid, kasutades GMP mudelit:

  • G (Goroutine): Kerge, sõltumatu täitmisüksus. Sisaldab virna, juhise näitaja ja muud seisundi teavet. Paljud gorutinasid võivad töötada ühel OS-niidul.
  • M (Machine): Operatsioonisüsteemi niit. Täidab gorutina koodi. Paljud M võivad olla kättesaadavad planeerijale.
  • P (Processor): Loogiline protsessor. Pakub konteksti gorutina täitmiseks. Sisaldab kohalikku gorutinate järjekorda, mis on valmis täitmiseks sellel M-il. P arv on tavaliselt võrdne runtime.NumCPU()-ga.

Koostoimed:

  1. Gorutina (G) luuakse ja asetatakse globaalsesse või kohalikku P järjekorda.
  2. Vaba M küsib P-d. Kui P on saadaval, ühendub M sellega.
  3. M võtab gorutina kohalikust järjekorrast ja alustab selle täitmist.
  4. Kui gorutina blokeerub (näiteks oodates I/O-d), M lahti ühendub P-st („hand off“). P jääb saadaval teisele M-le või planeerib teise gorutina oma järjekorras.
  5. Kui blokeeritud gorutina on valmis jätkama, asetatakse see tagasi P järjekorda või globaalsesse järjekorda.
  6. M võib olla loodud planeerija poolt vajaduse korral (näiteks, kui kõik olemasolevad M on blokeeritud) või eemaldatud, kui see ei ole aktiivne.

Preemption (sunni ülekanne): planeerija võib katkestada gorutina täitmise pärast teatud aja möödumist (time slice), et tagada õiglane protsessori aja jaotus teiste gorutinatega.

Work Stealing (töö varastamine): kui P kohalik järjekord on tühjaks saanud, võib ta proovida "varastada" gorutinasid globaalsest järjekorrast või teiste P järjekordadest.