请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

请教下老师,和其他各位大佬

在使用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))
}

正在回答 回答被采纳积分+3

1回答

ccmouse 2019-05-27 22:13:58

不加goroutine也不会一个时刻只能一个请求的。handler是会在另外的goroutine里调的,http库会帮你做这件事。当然也不是无脑的开goroutine,而是用了个叫multiplexer的东西。这里有一篇详细的分析:https://www.jianshu.com/p/be3d9cdc680b
gin的话,我们也可以用类似的方法进行分析。

0 回复 有任何疑惑可以回复我~
  • 提问者 会飞的wade #1
    谢谢老师的解答,那我这里加goroutine是不是就是多余的,没啥用,反而增加系统开销负担呢
    回复 有任何疑惑可以回复我~ 2019-05-28 22:50:39
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信