为了账号安全,请及时绑定邮箱和手机立即绑定

Go 忽略 GOMAXPROCS

Go 忽略 GOMAXPROCS

Go
智慧大石 2021-09-13 20:05:39
我正在尝试在主线程中与无限循环同时运行 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 周期。


查看完整回答
反对 回复 2021-09-13
  • 1 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信