首页 > 后端开发 > Golang > 正文

为什么在本地机器上运行相同的代码时 Go Playground 会超时?

Mary-Kate Olsen
发布: 2024-10-23 23:25:29
原创
433 人浏览过

Why Does the Go Playground Timeout While Running the Same Code on a Local Machine?

Go Playground 和 Go on Your Machine 之间的差异:Goroutine 执行

为了解决有关 Goroutine 执行的混乱,在两者上都执行了代码片段Go Playground 和本地机器。 Playground 产生错误“进程花费太长时间”,建议创建一个永久运行的 Goroutine,而本地机器几乎产生即时输出。这就提出了一个问题:当主 Goroutine 完成时,other() 函数中的 Goroutine 是否退出,还是继续在后台运行。

说明

On the Go Playground ,GOMAXPROCS 设置为 1。这表示一次只执行一个 Goroutine。如果没有阻塞,调度程序将不会切换到其他 Goroutine。

在代码中,主 Goroutine 在 did 通道上启动并阻塞。调度程序必须切换到 other() Goroutine,该 Goroutine 在完成通道上发送一个值,使两个 Goroutine 都可以运行。调度程序选择继续执行other()。由于 GOMAXPROCS 为 1,主 Goroutine 仍处于阻塞状态。

other() 然后启动无限循环 Goroutine。该 Goroutine 继续运行,导致主 Goroutine 无法恢复。因此,Playground 会发生超时。

在本地,GOMAXPROCS 通常会超过 1。因此,当无限循环 Goroutine 运行时,另一个 Goroutine(可能是主 Goroutine)会同时执行。当主 Goroutine 返回时,程序终止,因为它不会等待其他非主 Goroutine 的完成。

Go Playground 修改

通过显式设置 GOMAXPROCS 为1 在 Go Playground 上,可以重现“进程花费太长时间”的行为。相反,将 GOMAXPROCS 设置为较高的值,例如 2,通常会导致不同的执行顺序并成功终止而不会超时。

以上是为什么在本地机器上运行相同的代码时 Go Playground 会超时?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!