首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >戈朗-为什么要使用done频道?

戈朗-为什么要使用done频道?
EN

Stack Overflow用户
提问于 2016-10-06 03:01:26
回答 4查看 10.4K关注 0票数 6

这是Golang的一个示例代码。但无法理解为什么在这种情况下需要“完成”通道。

https://gobyexample.com/closing-channels

没有理由将真消息发送到to频道。我们可以知道,当“发送所有作业”消息被打印出来时,作业通道就被完成了,不是吗?

我删除了相对于to通道和结果仍然相同的代码。

https://play.golang.org/p/xOmzobFpTQ

EN

Stack Overflow用户

发布于 2018-01-06 22:14:53

我认为被接受的答案并没有说明确切的原因。

go语言属于过程范式,意味着每一条指令都是线性执行的。当一个go例程从主go例程中分叉时,它就开始了它自己的小冒险,留下主线程返回。

缓冲通道的容量为5,这意味着在缓冲区满之前它不会阻塞。如果它是空的,它也会阻塞(容量为零的信道本身是无缓冲的)。

因为只有4次迭代(0到<=3),所以读取操作不会阻塞。

通过指示主线程从完成的通道读取,我们强迫主线程等待,直到完成通道中有一些数据被消耗。当迭代结束时,执行of分支,而写入操作done <- true将导致主线程中的<- done读取操作的释放。读取操作等待从done中提取现在插入的值。

done读取之后,主Go例程不再被阻塞,因此成功终止。

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

https://stackoverflow.com/questions/39886840

复制
相关文章

相似问题

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