根据我在此处阅读的内容,golang 调度程序将自动确定某个 goroutine 是否在 I/O 上阻塞,并会自动切换到在未阻塞的线程上处理其他 goroutine。
我想知道的是调度程序如何确定该 goroutine 已停止阻塞 I/O。
它是否只是经常进行某种轮询以检查它是否仍然阻塞?是否有某种后台线程在运行以检查所有 goroutine 的状态?
例如,如果你要在一个 goroutine 中执行一个 HTTP GET 请求,需要 5 秒才能获得响应,它会在等待响应时阻塞,并且调度程序将切换到处理另一个 goroutine。既然如此,当服务器返回响应时,调度程序如何理解响应已经到达,是时候返回到生成 GET 的 goroutine 以便它可以处理 GET 的结果了?
浮云间
相关分类