Sobes.tech
Junior — Middle

W jaki sposób planista systemu operacyjnego zarządza wykonaniem funkcji, która wykonuje zapytanie sieciowe?

sobes.tech AI

Odpowiedź od AI

W Go, planista (scheduler) zarządza gorutynami, które są lekkimi wątkami. Gdy funkcja wykonuje żądanie sieciowe, zwykle blokuje się na operacji wejścia/wyjścia.

Planista Go używa wejścia/wyjścia nieblokującego i asynchronicznych wywołań systemowych. Gdy gorutyna oczekuje na odpowiedź z sieci, planista ją ustawia w stanie oczekiwania i przełącza się na wykonywanie innych gorutyn.

Pozwala to na efektywne wykorzystanie zasobów systemowych i nie blokuje wątku systemu operacyjnego. Po zakończeniu żądania sieciowego planista wznawia wykonywanie gorutyny.

Przykład:

func fetch(url string) {
    resp, err := http.Get(url) // żądanie sieciowe
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()
    // obsługa odpowiedzi
}

func main() {
    go fetch("http://example.com")
    // inne gorutyny są wykonywane równolegle
}

W ten sposób planista Go efektywnie zarządza gorutynami, przełączając je podczas operacji blokujących, takich jak żądania sieciowe.