gpt4 book ai didi

multithreading - Go 忽略 GOMAXPROCS

转载 作者:IT王子 更新时间:2023-10-29 02:34:13 24 4
gpt4 key购买 nike

我试图在主线程中同时运行一个 goroutine(go 版本 go1.4.1 darwin/amd64)和无限循环,但我无法让它工作。如果我理解正确的话,如果我指定了 GOMAXPROCS,go 应该为其他线程安排一个 goroutine,但它不会。即使我在 main 中显式写入 LockOSThread(),我仍然看不到任何输出。如何让 go 在单独的 os 线程中运行 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 {}
}

最佳答案

问题是当您输入 for{} 时,新的 goroutine 尚未创建(因此无法调度)。调度器只能在 goroutine 被阻塞或调用另一个函数时工作,因此在闭环中调度器无法调度。

for{} 之前添加一个 time.Sleep(time.Millisecond),它将起作用。

但是,我不知道你这样做是否只是为了好玩,但是如果你想在 goroutines 工作时永远等待(或者直到其他 gorounties 死锁或死掉),最好使用select{} 将阻止而不会浪费 CPU 周期。

关于multithreading - Go 忽略 GOMAXPROCS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28674897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com