求解关于TheWayToGo中描述协程未完成写入通道时,如果主程序结束,该协程不会被垃圾回收的章节

Groza · · 2489 次点击
1楼 <a href="/user/hei6775" title="@hei6775">@hei6775</a> 非常感谢,我刚好也去找了一些文章看了,差不多弄明白作者这段原文的意思了,您的回复再次确认了我心中的想法是正确的,并且补充了更多的细节。再次感谢您认真写下的回复。 我正在拜读这一篇博文。 <a href="/user/hei6775" title="@hei6775">@hei6775</a>
#2
更多评论
没看过The Way To Go,从提问的代码来看。 container.Iter()应该是通道,像这样 ``` yourChannel := make(chan int) for x := range yourChannel{ //............. } ``` 因为申明的是无缓冲通道,所以一个`goroutine`在往通道里存数据,一个`goroutine`在从通道中取数据,在那个存数据的goroutine意外提前结束时那么取数据的`goroutine`将会堵塞,造成`goroutine`泄漏,这个`goroutine`将不会被GC。 design应该是指 文章强调说明golang中的通道就是如此设计的。 这样的设计是为了线程安全,简单来说就是为了同步操作,避免竞争 关于通道更多的可以看`https://www.ardanlabs.com/blog/2017/10/the-behavior-of-channels.html` <a href="/user/Groza" title="@Groza">@Groza</a>
#1