Sobes.tech
Junior — Middle

Cum gestionează planificatorul de sistem de operare executarea unei funcții care face o solicitare de rețea?

sobes.tech AI

Răspuns de la AI

În Go, planificatorul (scheduler) gestionează goroutine-urile, care sunt fire ușoare. Când o funcție face o solicitare de rețea, ea se blochează de obicei pe o operație de intrare/ieșire.

Planificatorul Go utilizează intrare/ieșire non-blocantă și apeluri de sistem asincrone. Când o goroutine așteaptă un răspuns de la rețea, planificatorul o pune în stare de așteptare și comută la executarea altor goroutine-uri.

Acest lucru permite utilizarea eficientă a resurselor sistemului și nu blochează firul de execuție al sistemului de operare. După finalizarea solicitării de rețea, planificatorul reia execuția goroutine-ului.

Exemplu:

func fetch(url string) {
    resp, err := http.Get(url) // solicitare de rețea
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()
    // procesarea răspunsului
}

func main() {
    go fetch("http://example.com")
    // alte goroutine-uri rulează în paralel
}

Astfel, planificatorul Go gestionează eficient goroutine-urile, comutând între ele în timpul operațiilor blocante, precum solicitările de rețea.