Junior — Middle
Можете ли објаснити како ради планер задатака у језику Go и како он интерагује са системским нитима?
sobes.tech АИ
Одговор од АИ
U jeziku Go, planifier (scheduler) je odgovoran za upravljanje gorutinama, koje su lake niti koje se pokreću unutar jednog sistemskog niti (OS thread).
Go koristi M:N model, gde je M broj sistemskih niti, a N broj gorutina. Planifier raspoređuje gorutine između dostupnih sistemskih niti i naizmjenično ih izvršava radi efikasnog korišćenja CPU-a.
Glavne komponente planera:
- G (goroutine) — struktura koja predstavlja gorutinu.
- M (mašina) — sistemska nit na kojoj se izvršavaju gorutine.
- P (procesor) — logički procesor koji povezuje G i M, upravlja izvršavanjem.
Princip rada:
- Gorutina (G) se dodeljuje P.
- P se povezuje sa M (sistemski nit).
- M izvršava gorutinu.
- Planifier prebacuje izvršavanje između gorutina kada se jedna blokira (npr. na ulazu/izlazu) ili kada istekne njen kvant vremena.
Ovo omogućava Go-u efikasno korišćenje sistemskih resursa i obezbeđuje visok nivo konkurentnosti bez potrebe za kreiranjem mnogih teških sistemskih niti.
Primer kreiranja gorutine:
func main() {
go func() {
fmt.Println("Zdravo iz goroutine")
}()
fmt.Println("Zdravo iz main")
time.Sleep(time.Second) // Čeka da gorutina završi
}