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.