请教下老师,和其他各位大佬
来源:15-2 正则表达式

会飞的wade
2019-05-27
在使用http库创建web服务器,下面这段代码,加协程处理 go proccess(w) 有什么不同。这样能提高并发吗,不加协程处理,是不是这个web服务,同时就只能处理一个请求呢?其他的框架,比如gin,他们的原理也是在这里加go协程处理提高并发吗?
import (
"log"
"net/http"
"io"
)
func proccess(w http.ResponseWriter) {
resp, err := http.Get("https://baidu.com/")
if err != nil {
log.Print(err)
}
defer resp.Body.Close()
for name, values := range resp.Header {
w.Header()[name] = values
}
io.Copy(w, resp.Body)
}
func Handler(w http.ResponseWriter, r *http.Request) {
proccess(w)
//go proccess(w) //这里加 go 协程处理就能提高我这个WEB服务并发吗
}
func main() {
http.HandleFunc("/", Handler)
log.Fatal(http.ListenAndServe(":8866", nil))
}
写回答
1回答
-
ccmouse
2019-05-27
不加goroutine也不会一个时刻只能一个请求的。handler是会在另外的goroutine里调的,http库会帮你做这件事。当然也不是无脑的开goroutine,而是用了个叫multiplexer的东西。这里有一篇详细的分析:https://www.jianshu.com/p/be3d9cdc680b
gin的话,我们也可以用类似的方法进行分析。012019-05-28
相似问题