Junior — Middle
Как управлява планировчикът на ОС изпълнението на функция, която извършва мрежова заявка?
sobes.tech AI
Отговор от AI
В Go планировчикът (scheduler) управлява горутините, които са леки нишки. Когато функция изпълнява мрежова заявка, обикновено се блокира при операция за вход/изход.
Планировчикът на Go използва неблокиращ вход/изход и асинхронни системни извиквания. Когато горутина чака отговор от мрежата, той я поставя в състояние на изчакване и превключва към изпълнение на други горутини.
Това позволява ефективно използване на системните ресурси и не блокира нишката на ОС. След като мрежовата заявка приключи, планировчикът възобновява изпълнението на горутината.
Пример:
func fetch(url string) {
resp, err := http.Get(url) // мрежова заявка
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
// обработка на отговора
}
func main() {
go fetch("http://example.com")
// други горутини се изпълняват паралелно
}
По този начин, планировчикът на Go ефективно управлява горутините, превключвайки между тях при блокиращи операции като мрежови заявки.