【发布时间】:2016-09-16 22:23:45
【问题描述】:
我有以下执行例程的 go 代码。
package main
import (
"fmt"
"time"
)
func count(id int) {
for i := 0; i < 10; i++ {
fmt.Println(id, ":", i)
time.Sleep(time.Millisecond * 1000)
}
}
func main() {
for i := 0; i < 10; i++ {
go count(i)
}
time.Sleep(time.Millisecond * 11000)
}
我希望输出是:
1 : 0
2 : 0
3 : 0
4 : 0
5 : 0
6 : 0
7 : 0
8 : 0
9 : 0
1 : 1
2 : 1
3 : 1
4 : 1
etc...
但相反,我得到:
0 : 0
6 : 0
7 : 0
5 : 0
8 : 0
9 : 0
3 : 0
2 : 0
4 : 0
1 : 0
5 : 1
6 : 1
7 : 1
1 : 1
8 : 1
etc...
为什么它们不按原始顺序,在 for 循环之外执行 count 方法?为什么有些计数方法不同步?
【问题讨论】:
-
goroutines 没有顺序。虽然您可以按某种顺序调用它们,但不能保证它们按该顺序执行。它们以异步方式运行,手头有资源的人将开始工作。
标签: asynchronous go goroutine