Sobes.tech
Junior — Middle

Kako planer operativnog sistema upravlja izvršavanjem funkcije koja vrši mrežni zahtev?

sobes.tech АИ

Одговор од АИ

U Go, scheduler (planer) upravlja goroutine-ima, koji su laki niti. Kada funkcija izvršava mrežni zahtev, obično se blokira na operaciji ulaza/izlaza.

Go scheduler koristi neblokirajući ulaz/izlaz i asinhrone sistemske pozive. Kada goroutine čeka odgovor od mreže, scheduler je stavlja u stanje čekanja i prebacuje na izvršavanje drugih goroutine-a.

Ovo omogućava efikasno korišćenje sistemskih resursa i ne blokira nit operativnog sistema. Nakon završetka mrežnog zahteva, scheduler nastavlja izvršavanje goroutine.

Primer:

func fetch(url string) {
    resp, err := http.Get(url) // mrežni zahtev
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()
    // obrada odgovora
}

func main() {
    go fetch("http://example.com")
    // druge goroutine-ove se izvršavaju paralelno
}

Na ovaj način, Go scheduler efikasno upravlja goroutine-ima, prebacujući ih tokom blokirajućih operacija, kao što su mrežni zahtevi.