我对http中的goroutine有疑问。
在下面的代码中是一个简单的Web服务器。
如果5个人访问服务器,2个人进入功能handler1()
,3个人进入handler2()
,则golang将创建5个goroutine或我是否需要保留字词go
?
例如go http.HandleFunc("/h1", handler1)
package main
import(
"fmt"
"log"
"net/http"
)
func handler1(w http.ResponseWriter, r *http.Request) {
fmt.Println(w, "Hello 01!")
}
func handler2(w http.ResponseWriter, r *http.Request) {
fmt.Println(w, "Hello 02")
}
func main() {
http.HandleFunc("/h1", handler1)
http.HandleFunc("/h2", handler2)
log.Fatal(http.ListenAndServe(":8080", nil))
}
答案 0 :(得分:1)
无论您如何启动net/http
服务器,它最终都会调用Serve
,其中:
服务接受侦听器l上的传入连接,为每个连接创建一个新的服务goroutine 。服务goroutine读取请求,然后调用srv.Handler对其进行回复。