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:
- Gorutina (G) luuakse ja asetatakse globaalsesse või kohalikku P järjekorda.
- Vaba M küsib P-d. Kui P on saadaval, ühendub M sellega.
- M võtab gorutina kohalikust järjekorrast ja alustab selle täitmist.
- 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.
- Kui blokeeritud gorutina on valmis jätkama, asetatakse see tagasi P järjekorda või globaalsesse järjekorda.
- 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.