Asynchronous 为什么我相同的围棋程序出了问题?

Asynchronous 为什么我相同的围棋程序出了问题?,asynchronous,go,goroutine,Asynchronous,Go,Goroutine,我有下面的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() {

我有下面的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)
}
但是,我得到的是:

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方法的顺序排列?为什么有些计数方法不同步?

当goroutine执行时,程序员无法控制。如果您通过通道和sync.WaitGroup使用信号(比如让一个goroutine等待另一个goroutine完成),您可以进行一些控制,但是您无法控制goroutine的执行顺序,因为其他人已经评论过,goroutine主要是为了并发。并发可以包含并行性和通信。如果你想控制他们的秩序,你必须让他们通过信号沟通。例如,一个goroutine等待来自另一个goroutine的信号。请特别检查goroutine和channel

  • 例如:
  • 套餐:

goroutines没有订单。虽然您可以按某种顺序调用它们,但不能保证它们按该顺序执行。它们是异步运行的,任何手头有资源的都将开始工作。
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...