【发布时间】:2016-04-08 00:27:34
【问题描述】:
根据我阅读的here,golang 调度程序将自动确定一个 goroutine 是否在 I/O 上阻塞,并将自动切换到处理未阻塞线程上的其他 goroutine。
我想知道的是调度程序是如何计算出该 goroutine 已停止阻塞 I/O 的。
它是否只是经常进行某种轮询以检查它是否仍在阻塞?是否有某种后台线程正在运行来检查所有 goroutine 的状态?
例如,如果您要在一个 goroutine 中执行一个 HTTP GET 请求,该请求需要 5 秒才能获得响应,它会在等待响应时阻塞,并且调度程序将切换到处理另一个 goroutine。现在考虑到,当服务器返回响应时,调度程序如何理解响应已经到达,是时候回到发出 GET 的 goroutine 以便它可以处理 GET 的结果了?
【问题讨论】:
标签: multithreading go concurrency