【发布时间】:2012-05-23 13:23:36
【问题描述】:
这个简单的 HTTP 服务器包含一个对 time.Sleep() 的调用,它使 每个请求需要五秒钟。当我尝试快速加载多个 浏览器中的选项卡,很明显每个请求 排队并按顺序处理。如何让它处理并发请求?
package main
import (
"fmt"
"net/http"
"time"
)
func serve(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, world.")
time.Sleep(5 * time.Second)
}
func main() {
http.HandleFunc("/", serve)
http.ListenAndServe(":1234", nil)
}
其实我是在写完问题后才找到这个答案的,而且很微妙。无论如何我都会发布它,因为我在谷歌上找不到答案。你能看出我做错了什么吗?
【问题讨论】:
-
你找到的答案是什么?
-
问题出在我测试的方式上。 Web 浏览器限制了它们与任何一台服务器建立的连接数,即使在选项卡之间也是如此。
-
您可能还想使用 jMeter 向您的服务器发出请求
-
您还应该使用
runtime.NumCPU()看到您的CPU 编号,并使用runtime.GOMAXPROCS(numCPU)设置它。如果 numCPU 等于 1,则不会发生并发,因为进程只会在一个 CPU 上执行。
标签: go