我想知道goroutine和go网络服务器在请求进入时如何工作:
func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }
在这段代码中
每次/致电的请求handler。这是否意味着每个请求都会生成自己的goroutine?或者它派生自己的process还是thread?是否有任何文档说明这些请求如何获得自己的goroutine?
/
handler
process
thread
其他语言如何处理此请求?例如,Python flask是否为每个请求启动自己的进程?
谢谢,
net/http根据http://golang.org/pkg/net/http/#Server.Serve的文档,Go的HTTP服务器(中的)会按请求为每个请求生成一个goroutine(不是线程)-
net/http
服务在侦听器l上接受传入连接,为每个连接创建一个新的服务goroutine。服务goroutine读取请求,然后调用srv.Handler对其进行回复。
其他语言可以通过多种方式处理此问题,包括:
我建议阅读https://www.digitalocean.com/community/tutorials/a-comparison-of-rack- web-servers-for-ruby-web- applications,以了解一些Ruby Web服务器的工作方式示例事物(包括上述方法),以及适用于Python的https://www.digitalocean.com/community/tutorials/a-comparison- of-web-servers-for-python-based-web- applications,其中应包括洞察力。