gpt4 book ai didi

go - goroutine 调用行之后的行是否比 goroutine 的第一行更早开始?

转载 作者:行者123 更新时间:2023-12-01 22:42:59 29 4
gpt4 key购买 nike

这是代码:

import "fmt"

func main() {
messages := make(chan string, 1)
go func(c chan string) {
c <- "Hi"
}(messages)
select {
case msg := <-messages:
fmt.Println("received message", msg)
default:
fmt.Println("no message received")
}
}

它输出 no message received .
或者这段代码:
import (
"fmt"
"time"
)

func f(from string) {
for i := 0; i < 3; i++ {
fmt.Println(from, ":", i)
}
}

func main() {
go f("goroutine")

go func(msg string) {
fmt.Println(msg)
}("going")

time.Sleep(time.Second)
fmt.Println("done")
}

意外打印
going
goroutine : 0
goroutine : 1
goroutine : 2

尽管 goroutine 与 going比柜台晚打电话。为什么?

最佳答案

多个 goroutine 之间没有执行顺序保证。只有当两个 goroutine 使用一个 channel 交换数据,或者使用另一个同步机制进行同步时,才能建立排序保证。在您的情况下,您碰巧观察到一个 goroutine 恰好在另一个之前运行的执行。当您多次运行它时,您可能会观察到不同的顺序。

关于go - goroutine 调用行之后的行是否比 goroutine 的第一行更早开始?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61804629/

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