下面的代码是用编写的Go编程语言
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会立即发送请求并退出,这不会导致泄漏。
发布于 2017-09-10 13:55:25
显示的代码不会导致泄漏。
正如该段所述:
如果我们用了一个没有缓冲的频道
意思:如果我们使用了一个没有缓冲的频道.
因此,只有当通道没有缓冲时,才会发生泄漏。
https://stackoverflow.com/questions/46141353
复制相似问题