golang的缓冲golang channel close和无缓冲golang channel close的区别

403 Forbidden
Request forbidden by administrative rules.还有比GoLang Channel更好的方式代替Mutex吗? - 知乎162被浏览<strong class="NumberBoard-itemValue" title="1分享邀请回答Use whichever is most expressive and/or most simple.
Channel 和锁机制在 golang 中不是替代和被替代的关系。如果你试图用一种方式解决所有问题,那么必定会遇到让你抓狂的情况。最后附上一句话:Share memory by communicating, don't communicate by sharing memory.
83 条评论分享收藏感谢收起2添加评论分享收藏感谢收起博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)您要找的页面不存在 - 简书
您要找的页面不存在
可能是因为您的链接地址有误、该文章已经被作者删除或转为私密状态。golang的缓冲channel和无缓冲channel的区别
- Go语言中文网 - Golang中文社区
<meta name="author" content="polaris ">
golang的缓冲channel和无缓冲channel的区别
ziyouchutuwenwu
· 5036 次点击 ·
开始浏览 & &
话说golang的channel同步的定义真是让人无力吐槽,码农的用户体验就这么难搞么,超耐磨阿,无缓冲和缓冲居然有这么大区别。。。。靠
转载一段网上的资料
--------------------------------------------------------------------------------------------------------------------------------------------------------
golang channel 有缓冲 与 无缓冲 是有重要区别的
我之前天真的认为 有缓冲与无缓冲的区别 只是 无缓冲的 是 默认 缓冲 为1 的缓冲式
其实是彻底错误的,无缓冲的与有缓冲channel有着重大差别
那就是一个是同步的 一个是非同步的
怎么说?比如
c1:=make(chan int)
c2:=make(chan int,1)
无缓冲的 不仅仅是 向 c1 通道放 1 而是 一直要有别的携程 &-c1 接手了 这个参数,那么c1&-1才会继续下去,要不然就一直阻塞着
而 c2&-1 则不会阻塞,因为缓冲大小是1 只有当 放第二个值的时候 第一个还没被人拿走,这时候才会阻塞。
就是一个送信人去你家门口送信 ,你不在家 他不走,你一定要接下信,他才会走。
无缓冲保证信能到你手上
有缓冲的 就是一个送信人去你家仍到你家的信箱 转身就走 ,除非你的信箱满了 他必须等信箱空下来。
有缓冲的 保证 信能进你家的邮箱
看测试代码
1 package main
3 import &#34;fmt&#34;
5 var c = make(chan int, 1)
7 func f() {
c &- &#39;c&#39;
fmt.Println(&#34;在goroutine内&#34;)
14 func main() {
c &- &#39;c&#39;
fmt.Println(&#34;外部调用&#34;)
package main
&#34;fmt&#34;
func writeRoutine(test_chan chan int, value int) {
test_chan &- value
func readRoutine(test_chan chan int) {
&-test_chan
func main() {
c := make(chan int)
//readRoutine(c)
//go writeRoutine(c, x)
//writeRoutine(c, x)
//go readRoutine(c)
//go readRoutine(c)
//writeRoutine(c, x)
go writeRoutine(c, x)
readRoutine(c)
fmt.Println(x)
可以在部分代码注释掉,看效果,再体会下
5036 次点击 &
1 回复 &| &直到
请尽量让自己的回复能够对别人有帮助
支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
支持 @ 本站用户;支持表情(输入 : 提示),见
图片支持拖拽、截图粘贴等方式上传
记住登录状态
话说golang的channel同步的定义真是让人无力吐槽,码农的用户体验就这么难搞么,超耐磨阿,无缓冲和缓冲居然有这么大区别。。。。靠
转载一段网上的资料
--------------------------------------------------------------------------------------------------------------------------------------------------------
golang channel 有缓冲 与 无缓冲 是有重要区别的
我之前天真的认为 有缓冲与无缓冲的区别 只是 无缓冲的 是 默认 缓冲 为1 的缓冲式
其实是彻底错误的,无缓冲的与有缓冲channel有着重大差别
那就是一个是同步的 一个是非同步的
怎么说?比如
c1:=make(chan int)
c2:=make(chan int,1)
无缓冲的 不仅仅是 向 c1 通道放 1 而是 一直要有别的携程 &-c1 接手了 这个参数,那么c1&-1才会继续下去,要不然就一直阻塞着
而 c2&-1 则不会阻塞,因为缓冲大小是1 只有当 放第二个值的时候 第一个还没被人拿走,这时候才会阻塞。
就是一个送信人去你家门口送信 ,你不在家 他不走,你一定要接下信,他才会走。
无缓冲保证信能到你手上
有缓冲的 就是一个送信人去你家仍到你家的信箱 转身就走 ,除非你的信箱满了 他必须等信箱空下来。
有缓冲的 保证 信能进你家的邮箱
看测试代码
1 package main
3 import &#34;fmt&#34;
5 var c = make(chan int, 1)
7 func f() {
c &- &#39;c&#39;
fmt.Println(&#34;在goroutine内&#34;)
14 func main() {
c &- &#39;c&#39;
fmt.Println(&#34;外部调用&#34;)
package main
&#34;fmt&#34;
func writeRoutine(test_chan chan int, value int) {
test_chan &- value
func readRoutine(test_chan chan int) {
&-test_chan
func main() {
c := make(chan int)
//readRoutine(c)
//go writeRoutine(c, x)
//writeRoutine(c, x)
//go readRoutine(c)
//go readRoutine(c)
//writeRoutine(c, x)
go writeRoutine(c, x)
readRoutine(c)
fmt.Println(x)
可以在部分代码注释掉,看效果,再体会下
601 人在线
&最高记录 2928
& studygolang.com Go语言中文网,中国 Golang 社区,致力于构建完善的 Golang 中文社区,Go语言爱好者的学习家园。
Powered by
&o&服务器由
赞助 &·&CDN 由
VERSION: V3.5.0&·&8.990045ms&·&为了更好的体验,本站推荐使用 Chrome 或 Firefox 浏览器
登录和大家一起探讨吧
记住登录状态
还不是会员}

我要回帖

更多关于 golang channel 缓冲 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信