gpt4 book ai didi

asynchronous - 为什么我相同的 go 例程乱序了?

转载 作者:IT王子 更新时间:2023-10-29 01:36:05 24 4
gpt4 key购买 nike

我有以下 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循环之外?为什么有些计数方法会不同步?

最佳答案

goroutine 何时执行是程序员无法控制的。如果你通过 channel 和 sync.WaitGroup 使用信号,你有一些控制,(比如让一个 goroutine 等待另一个 goroutine 完成)但是你无法控制 goroutines 的执行顺序

关于asynchronous - 为什么我相同的 go 例程乱序了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37333376/

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