首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Go中带有缓冲通道的goroutine泄漏

Go中带有缓冲通道的goroutine泄漏
EN

Stack Overflow用户
提问于 2017-09-10 13:43:21
回答 1查看 915关注 0票数 1

下面的代码是用编写的Go编程语言

代码语言:javascript
运行
复制
func mirroredQuery() string {
    responses := make(chan string, 3)
    go func() { responses <- request("asia.gopl.io") }()
    go func() { responses <- request("europe.gopl.io") }()
    go func() { responses <- request("americas.gopl.io") }()
    return <-responses // return the quickest response
}

func request(hostname string) (response string) { /* ... */ }

书上说

如果我们使用一个没有缓冲的频道,两条速度较慢的猩猩就会被困在无法接收到的频道上发送它们的响应。这种情况,被称为戈鲁丁泄漏,将是一个错误。与垃圾变量不同的是,泄露的大猩猩并不会自动成为大学特德,所以重要的是要确保在不再需要的时候让猩猩自行终止。

问题是为什么这种情况会导致goroutine leak.In I的想法,缓冲通道的cap是3,而3 goroutines会立即发送请求并退出,这不会导致泄漏。

EN

回答 1

Stack Overflow用户

发布于 2017-09-10 13:55:25

显示的代码不会导致泄漏。

正如该段所述:

如果我们用了一个没有缓冲的频道

意思:如果我们使用了一个没有缓冲的频道.

因此,只有当通道没有缓冲时,才会发生泄漏。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46141353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档