Go 忽略 GOMAXPROCS

我正在尝试在主线程中与无限循环同时运行 goroutine(go 版本 go1.4.1 darwin/amd64),但我无法使其正常工作。如果我理解正确,如果我指定了 GOMAXPROCS,go 应该将 goroutine 安排到其他线程,但它不会。即使我LockOSThread()在 main 中明确写入,我仍然看不到输出。如何让 go 在单独的操作系统线程中运行 goroutine?


package main


import(

    "fmt"

    "time"

    "runtime"

)


func main() {

    runtime.GOMAXPROCS(runtime.NumCPU() * 8)


    go func() {

        for {

            time.Sleep(1 * time.Second)

            fmt.Println("From routine")

        }

    }()


    for {}

}


智慧大石
浏览 241回答 1
1回答

ITMISS

问题是当你输入for{}. 调度器只能在 goroutine 被阻塞或调用另一个函数时才能工作,因此在闭环中调度器无法调度。在 之前添加一个 time.Sleep(time.Millisecond)for{}它将起作用。但是,我不知道您这样做是否只是为了好玩,但是如果您想在 goroutines 工作时永远等待(或直到其他 gorounties 死锁或死亡),最好使用select{}它会阻塞不浪费 CPU 周期。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go