Sobes.tech
Junior — Middle

Hoe beheert de besturingssysteemplanner de uitvoering van een functie die een netwerkverzoek doet?

sobes.tech AI

Antwoord van AI

In Go beheert de scheduler (planner) de goroutines, die lichte threads zijn. Wanneer een functie een netwerkverzoek doet, wordt deze meestal geblokkeerd op een invoer-/uitvoeroperatie.

De Go-scheduler gebruikt niet-blokkerende invoer/uitvoer en asynchrone systeemoproepen. Wanneer een goroutine wacht op een antwoord van het netwerk, zet de scheduler deze in een wachtstatus en schakelt over op andere goroutines.

Dit maakt efficiënt gebruik van systeembronnen mogelijk en blokkeert de OS-thread niet. Na voltooiing van het netwerkverzoek hervat de scheduler de uitvoering van de goroutine.

Voorbeeld:

func fetch(url string) {
    resp, err := http.Get(url) // netwerkverzoek
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()
    // verwerking van het antwoord
}

func main() {
    go fetch("http://example.com")
    // andere goroutines worden parallel uitgevoerd
}

Op deze manier beheert de Go-scheduler efficiënt de goroutines, door ze te schakelen tijdens blokkerende operaties zoals netwerkverzoeken.