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

  1. Kreira se gorutina (G) i stavlja u globalnu ili lokalnu red čekanja P.
  2. Slobodan M traži P. Ako je P dostupan, M se na njega povezuje.
  3. M preuzima gorutinu iz lokalne red čekanja P i počinje njeno izvršavanje.
  4. 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.
  5. Kada je blokirana gorutina spremna za nastavak, vraća se u red čekanja P ili u globalnu red čekanja.
  6. 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.