我正在尝试在主线程中与无限循环同时运行 goroutine(go 版本 go1.4.1 darwin/amd64),但我无法使其正常工作。如果我理解正确,如果我指定了 GOMAXPROCS,go 应该将 goroutine 安排到其他线程,但它不会。即使我LockOSThread()在 main 中明确写入,我仍然看不到输出。如何让 go 在单独的操作系统线程中运行 goroutine?package mainimport( "fmt" "time" "runtime")func main() { runtime.GOMAXPROCS(runtime.NumCPU() * 8) go func() { for { time.Sleep(1 * time.Second) fmt.Println("From routine") } }() for {}}
1 回答
ITMISS
TA贡献1871条经验 获得超8个赞
问题是当你输入for{}
. 调度器只能在 goroutine 被阻塞或调用另一个函数时才能工作,因此在闭环中调度器无法调度。
在 之前添加一个 time.Sleep(time.Millisecond)for{}
它将起作用。
但是,我不知道您这样做是否只是为了好玩,但是如果您想在 goroutines 工作时永远等待(或直到其他 gorounties 死锁或死亡),最好使用select{}
它会阻塞不浪费 CPU 周期。
- 1 回答
- 0 关注
- 183 浏览
添加回答
举报
0/150
提交
取消