在Go游乐场未获得预期的结果

时间:2019-01-24 02:47:05

标签: go concurrency parallel-processing goroutine

我有一个非常简单的go代码,如下所示:

var wg sync.WaitGroup
func main() {
    for i := 0; i < 100; i++ {
        wg.Add(1)
        go func(i int) {
            fmt.Printf("No %d goroutine begin\n", i)
            fmt.Printf("No %d goroutine is done\n", i)
            wg.Done()
        }(i)
    }
    wg.Wait()
}

在具有12核心CPU的本地计算机上,此代码将按预期方式随机输出。 但是,当我在go playground environment中运行代码时,得到了意外的结果。我知道Go操场只使用一个内核来运行代码,因此预期的输出应该是 No 0 goroutine begin 的一个,但是它总是以最后一个数字 No 9 goroutine开始开始。那是正确的还是我错过了什么?

1 个答案:

答案 0 :(得分:3)

Go游乐场具有经过修改的调度程序和其他特殊功能。

The Go Blog: Inside the Go Playground

The Go Playground:关于