gpt4 book ai didi

concurrency - 相同的 Golang 代码不同的输出,为什么?

转载 作者:IT王子 更新时间:2023-10-29 00:57:02 25 4
gpt4 key购买 nike

我正在尝试执行来自 golang.org 的示例:http://tour.golang.org/#63

  • 我已经更改了代码以测试 Gosched 到底做了什么。*

你可以看到输出是: enter image description here

hello
hello
hello
hello
hello

但是当我将这些代码复制到我的 Mac OS X 10.8(Go 版本 1.0.3)时,输出发生了变化: enter image description here xxxxxx$ 去版本 去版本go1.0.3 xxxxxx$ 去运行 goroutine.go 你好 世界 你好 世界 你好 世界 你好 世界 你好 世界

根据这个answer ,我应该使用 runtime.GoSched,但实际上我不需要。所以我认为出了点问题。

请帮我解决这个问题,非常感谢。

最佳答案

这里的问题是您有两种不同的实现方式。

在本地,每次调用 fmt.Println 时,您的代码都会让步给调度程序。 Println 写入执行系统调用的标准输出。所有系统调用的产生方式与 runtime.Gosched 相同。

play.golang.org 是一个黑盒子。我们实际上并不知道它是如何工作的。但是,从您给出的示例来看,当调用 fmt.Println 时,play 似乎没有执行系统调用。这是有道理的。他们可能用缓冲区替换了 os.Stdout 来保存打印的内容。

关于concurrency - 相同的 Golang 代码不同的输出,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13262487/

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