前面一篇文章提到,Go内置的net/http中使用了BlockingIO,主要体现在两层for循环。但真的是这样吗?本文我们看看Gonet库中 Server.ListenAndServe 的实现细节。net.Listen("tcp",addr) 方法通过系统调用socket、bind、listen生成 net.Listener 对象,在后面的for循环中,通过系统调用accept等待新的tcpconn,将其包装成一个conn对象,在新的goroutine中对这个conn进行处理。这里是典型的pergoroutineperconnection模型。这个环节看起来是阻塞的,但创建socke