服务端代码运行在 arm 上,大致思路如下,
func exampleHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "example handler")
md5BigFile(); // 耗时 8s 左右
}
在返回结果之后,又做了一个 cpu 密集操作。
在客户端调试发现,总是需要等待 8s 左右,才能收到字符串 example handler
。只要我把 md5BigFile()
函数注释,就没有问题。
我猜测 ResponseWriter 把数据发进内核后,cpu 又被立即占满,导致无法及时发送出去。
我去查了一下 golang 默认是 nodelay 的,那怎么还出现这种问题呢?或许是我忽略了什么,还请各位大兄弟指点一下。