正如我从golang文档中了解到的,如果我使用8个内核的cpu(intel
i7)设置runtime.GOMAXPROCS(8),然后启动无限循环goroutine,则不应阻塞其他gorutine,因为有足够的线程和goprocs。但是,当使用net
/ http包时,情况并非如此,无限循环goroutine会在几次调用后阻塞http服务器。谁能帮助解释原因?
如果我注释“无限循环”这一行,则在服务器之后启动客户端,客户端将输出1000个星号;但是,如果我启用了goroutine,客户端将在打印一些星号后阻止
我试过在goroutine中添加runtime.LockOSThread(),似乎不起作用
我的环境:osx 10.10,go版本go1.3.1 darwin / amd64
服务器代码:
package main
import (
"fmt"
"log"
"net/http"
"runtime"
)
func myHandler(w http.ResponseWriter, req *http.Request) {
w.Write([]byte("hello"))
}
func infiniteloop() {
for {
}
}
func main() {
// set max procs for multi-thread