cla*_*rkk 1 multithreading http go
如何利用所有CPU并为每个CPU生成一个http进程?
获得数量的CPU
numCPU := runtime.NumCPU()
Run Code Online (Sandbox Code Playgroud)
启动http
package main
import (
"fmt"
"net/http"
)
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)
}
Run Code Online (Sandbox Code Playgroud)
如果您的目标只是让您的请求处理代码在所有CPU内核上运行,那么每个连接net/http已经启动了一个goroutine(一个类似于线程的东西,具有特定于Go的实现).您只需NumCPU在程序开始时允许goroutine在多个核心上运行.
该Accept循环在一个单一的goroutine运行,但解析请求和产生响应的实际工作中的每一个连接运行.
对于将来的Go版本,此行号将是错误的,但是现在您可以net/http在http://golang.org/src/pkg/net/http/server.go#L1721上查看实际的语句,该语句将连接到goroutine.