1

这是谢大神书里的一个例子,我改成了下面这样:

package main

import (
    "fmt"
)

func say(s string) {
    for i := 0; i < 5; i++ {
        fmt.Println(s)
    }
}

func main() {
    go say("world") //开一个新的Goroutines执行
    for {
    }
}

主线程在开辟了一个新线程之后就进入死循环,但是子线程里的Println貌似没有输出。这是为什么?

3个回答

1

已采纳

因为目前的GO版本中,默认只使用单个CPU工作,虽然开启了gorutine,但死循环把资源占用了,rutine分配不到cpu去执行。

要想输出结果,有两种办法,1,在main中让出cpu,2,开启多核心支持。

代码示例:

package main

import (
    "fmt"
    "runtime"
)

func say(s string) {
    for i := 0; i < 5; i++ {
        fmt.Println(s)
    }
}

func main() {
    go say("world") //开一个新的Goroutines执行
    //runtime.Gosched()     //方案1,出让CPU时间
    runtime.GOMAXPROCS(2)   //方案2,设置使用2核心CPU
    for {
    }
}

希望对你有所帮助。

1

Go1.6版本
当前GOMAXPROCS会被设置为可用的核数,之前默认为1

0

你可以把 for {} 换成 select {} 试试。

撰写答案

相似问题