Middle+
Ispričaj o obrascu upravljanja gorutinama (GMP) u Go.
sobes.tech АИ
Одговор од АИ
Planer Go upravlja gorutine, niti operativnog sistema i logičke procesore koristeći GMP model:
- G (Goroutine): Lagan, nezavisna jedinica za izvršavanje. Sadrži stek, pokazivač na instrukciju i druge informacije o stanju. Više gorutina može raditi na jednom niti OS-a.
- M (Machine): Nit operativnog sistema. Djeluje kao izvršilac koji pokreće kod gorutine. Skup M može biti dostupan planer.
- P (Processor): Logički procesor. Pruža kontekst za izvršavanje gorutine. Sadrži lokalnu red čekanja gorutina spremnih za izvršenje na ovom M. Podrazumevani broj P je jednak
runtime.NumCPU().
Interakcija:
- Kreira se gorutina (G) i stavlja u globalnu ili lokalnu red čekanja P.
- Slobodan M traži P. Ako je P dostupan, M se na njega povezuje.
- M preuzima gorutinu iz lokalne red čekanja P i počinje njeno izvršavanje.
- Ako gorutina blokira (npr. čeka na I/O), M se odvoji od P ("hand off"). P ostaje dostupan za drugog M ili planira drugu gorutinu iz svoje red čekanja.
- Kada je blokirana gorutina spremna za nastavak, vraća se u red čekanja P ili u globalnu red čekanja.
- M može biti kreiran od strane planera ako je potrebno (npr. ako su svi postojeći M blokirani) ili uklonjen kada je neaktivan.
Preemption (prisilno prebacivanje): Planer može prekinuti izvršavanje gorutine nakon određenog vremenskog perioda (time slice) kako bi osigurao pravičnu raspodelu CPU vremena između ostalih gorutina.
Work Stealing (krađa rada): Ako P potroši gorutine u svojoj lokalnoj red čekanja, može pokušati "ukrasti" gorutine iz globalne red čekanja ili redova drugih P.