我想知道代码1是否管理内部例程,并且当requets增加(几十个)时可以使用一个CPU的所有内核,或者如果每个处理程序我必须放置关键字go,表明函数处理程序将由一个gorotine管理,如在代码2中显示它,因此可以使用服务器的所有核心。
代码1
package main
import (
"fmt"
"net/http"
)
func HandlerOne(w http.ResponseWriter, req *http.Request) {
fmt.Println("message one")
}
func HandlerTwo(w http.ResponseWriter, req *http.Request) {
fmt.Println("message two")
}
func main() {
http.HandleFunc("/R1", HandlerOne)
http.HandleFunc("/R2", HandlerTwo)
err := http.ListenAndServe(":9998", nil)
if err != nil {
fmt.Printf("Server failed: ", err.Error())
}
}
代码2
package main
import (
"fmt"
"net/http"
)
func HandlerOne(w http.ResponseWriter, req *http.Request) {
fmt.Println("message one")
}
func HandlerTwo(w http.ResponseWriter, req *http.Request) {
fmt.Println("message two")
}
func main() {
go http.HandleFunc("/R1", HandlerOne)
go http.HandleFunc("/R2", HandlerTwo)
err := http.ListenAndServe(":9998", nil)
if err != nil {
fmt.Printf("Server failed: ", err.Error())
}
}
注意:两者都运行没有问题,您可以使用
进行测试curl -l http://localhost:9998/R1
或
curl -l http://localhost:9998/R2
答案 0 :(得分:1)
版本2错了。包http会为您处理所有这些内容。
只需确保使用适当的GOMAXPROCS调用您的程序,例如比如GOMAXPROCS=4 ./main