如何使用http进行多个进程

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)

two*_*two 5

如果您的目标只是让您的请求处理代码在所有CPU内核上运行,那么每个连接net/http已经启动了一个goroutine(一个类似于线程的东西,具有特定于Go的实现).您只需NumCPU在程序开始时允许goroutine在多个核心上运行.

Accept循环在一个单一的goroutine运行,但解析请求和产生响应的实际工作中的每一个连接运行.

对于将来的Go版本,此行号将是错误的,但是现在您可以net/httphttp://golang.org/src/pkg/net/http/server.go#L1721上查看实际的语句,该语句将连接到goroutine.