使用Golang有一段时间了,今天来说说Golang并发中chan的作用,书本和网上讲解的并不是特别容易理解(对于没有高并发经验的人来讲)
首先先明白一点:无缓冲=堵塞,缓冲=非堵塞
先来一段无缓冲的代码:
这段代码执行的非常顺利!但是如果我把m<-1放在go test()上面会出现什么情况呢?
Golang报错了!我们最开始的时候已经说了无缓冲就是堵塞。意味着不能把m<-1放到go test()上面,如果放到上面就表示后面的代码堵塞不执行了。
再来看一段有缓冲:
咦!不报错啦!为啥呢?不一样的地方也就make(chan int,1)多一个1吗?
这个1你可以理解为容量,就是说m这个chan类型可以容下一个m<-1,没人来取时就不堵塞,如果
细心的人可能发现数据执行有些问题,为什么循环执行好了,不再最后面呢?
因为是不堵塞的,所以就不能保证谁能先执行了。
Comments : 0