Middle
Šta je vreme izvršenja (runtime) i kako radi planer (scheduler)?
sobes.tech АИ
Одговор од АИ
Vreme izvršavanja (runtime) u Go je okruženje u kojem se izvršavaju Go programi. Uključuje:
- Upravljanje memorijom: Sakupljač smeća (garbage collector) automatski upravlja dodelom i oslobađanjem memorije.
- Planer (scheduler): Upravljanje izvršavanjem gorutina na nitima operativnog sistema.
- Sistemski pozivi: Obezbeđuje interfejs za interakciju sa operativnim sistemom.
- Primitivi za sinhronizaciju: Kanali, mutexi i drugi mehanizmi za koordinaciju gorutina.
Planer u Go implementira model M:N (više gorutina na više niti OS-a). Njegove glavne komponente:
- G (Goroutine): Laka nit za izvršenje, u suštini apstrakcija nad funkcijom.
- M (Machine): Nit operativnog sistema na kojoj se izvršavaju Go programi.
- P (Processor): Logički procesor povezan sa nitima OS-a. Čuva lokalnu
runnablered gorutina.
Princip rada planera:
- Gorutine (G) se kreiraju i dodaju u globalni ili lokalni
runnablered. - Nitovi OS-a (M) se povezuju sa logičkim procesorima (P). Broj P je podrazumevano jednak broju CPU jezgara (
GOMAXPROCS). - P uzima gorutinu iz svoje lokalne reda. Ako je lokalni red prazan, P pokušava da "ukrade" (steal) gorutine iz reda drugog P ili iz globalnog reda.
- M izvršava gorutinu.
- Kada gorutina blokira (npr. pri čitanju iz kanala bez podataka ili pri sistemskom pozivu), M se odvoji od P, i P postaje dostupan za izvršavanje druge gorutine. Blokirana gorutina se stavlja u čekanje. Kada se blokada ukloni, gorutina ponovo postaje
runnablei vraća se u red. - Ako se M blokira u sistemskom pozivu, on ne zadržava P. Može biti kreiran novi M ili korišćen postojeći, kako bi P mogao da nastavi sa izvršavanjem drugih gorutina.
Ovaj pristup omogućava efikasno korišćenje procesorskih resursa i lako skaliranje paralelnih zadataka, skrivajući složenost upravljanja nitima OS-a od programera.
// Primer kreiranja gorutine
func myFunc() {
// Kod gorutine
}
func main() {
go myFunc() // Pokretanje gorutine
// Glavni program nastavlja izvršavanje paralelno
}