为了账号安全,请及时绑定邮箱和手机立即绑定

奇怪的 Goroutines 行为

奇怪的 Goroutines 行为

Go
喵喔喔 2021-06-19 19:10:51
如果我错了,请纠正我。据我所知,goroutine 的工作原理与线程大致相似。所以如果我用不同的参数生成相同的函数,前缀为 go。它应该可以正常工作吗?package mainimport "fmt"func f(from string) {    for i := 0; i < 3; i++ {        fmt.Println(from, ":", i)    }}func main() {    go f("direct")    go f("redirect")    //var input string    //fmt.Scanln(&input)}实际输出:rahul@g3ck0:~/programs/go$ go run goroutine.go rahul@g3ck0:~/programs/go$ 我刚回来提示。预期输出:direct : 0direct : 1direct : 2redirect : 0redirect : 1redirect : 2不一定按相同的顺序。无法理解这种奇怪的行为。我错过了什么吗?编辑:添加 Scan 语句可以解决它。但是有没有更好的方法呢?
查看完整描述

2 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

如上所述,最后的 select{} 确保显示输出,但您不能期望 go 例程以特殊顺序运行。

如果您运行并行 go 例程,则永远无法保证它们将按什么顺序运行。你不能不让它们按顺序运行,因为它们是并行运行的!

您可能会在一台机器上一次又一次地获得预期的输出,但不能保证每次在任何给定机器上都能按顺序打印输出!!


查看完整回答
反对 回复 2021-06-21
  • 2 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信