Middle
Kas yra vykdymo laikas (runtime) ir kaip veikia planuotojas (scheduler)?
sobes.tech AI
Atsakymas iš AI
Go vykdymo laikas (runtime) yra aplinka, kurioje vykdomos Go programos. Ji apima:
- Atminties valdymas: Garbage collector (šiukšlių surinkėjas) automatiškai valdo atminties paskirstymą ir laisvinimą.
- Planavimo (scheduler): Valdo gorutinių vykdymą operacinės sistemos gijų lygiu.
- Sisteminiai iškvietimai: Teikia sąsają sąveikai su operacine sistema.
- Sinchronizacijos primityvai: Kanalai, mutexai ir kiti mechanizmai gorutinių koordinavimui.
Go planuotojas įgyvendina M:N modelį (kelios gorutinos vienu metu veikia keliuose OS gijuose). Jo pagrindiniai komponentai:
- G (Goroutine): Lengvas vykdymo gijas, iš esmės funkcijos abstrakcija.
- M (Machine): Operacinės sistemos gija, kurioje vykdomos Go programos.
- P (Processor): Loginis procesorius, susijęs su OS gija. Laiko vietinę
runnableeilę gorutinių.
Planavimo darbo principas:
- Gorutinos (G) yra sukuriamos ir pridedamos į globalią arba vietinę
runnableeilę. - OS gijos (M) yra susijusios su loginiais P. P skaičius paprastai lygus CPU branduolių skaičiui (
GOMAXPROCS). - P pasiima gorutinas iš savo vietinės eilės. Jei vietinė eilė tuščia, P bando "pasiskolinti" (steal) gorutinas iš kitos P eilės arba iš globalios eilės.
- M vykdo gorutinas.
- Kai gorutina blokuojasi (pavyzdžiui, skaitydama iš kanalo be duomenų arba atliekant sisteminį iškvietimą), M atjungiasi nuo P, ir P tampa prieinama kitai gorutinai. Blokuojama gorutina būna laukimo režime. Kai blokavimas pašalinamas, gorutina vėl tampa
runnableir įdedama į eilę. - Jei M blokuojasi sistemos iškvietimo metu, jis neapima P. Gali būti sukurtas naujas M arba naudojamas esamas, kad P galėtų tęsti kitų gorutinių vykdymą.
Šis požiūris leidžia efektyviai naudoti procesoriaus išteklius ir lengvai mastelinti paralelines užduotis, paslėpiant OS gijų valdymo sudėtingumą nuo programuotojo.
// Gorutinos kūrimo pavyzdys
func myFunc() {
// Gorutinos kodas
}
func main() {
go myFunc() // Gorutinos paleidimas
// Pagrindinė programa tęsia vykdymą paraleliai
}