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

  1. Gorutina (G) se dodeljuje P.
  2. P se povezuje sa M (sistemski nit).
  3. M izvršava gorutinu.
  4. 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
}