golang中的chan

golang中的chan,像是一个萝卜一个坑的读写管道。什么意思呢?

就是说如果你make 了一个只有1个位置的chan,那么它就只有一个存储位置。

你往里面写了一条内容,当这条内容没有被谁读取消费掉。它就一直block住。你无法往里面再写更多。

除非你make的时候,制定一个size,比如make(chan bool, 4) ,就有4个位置的管道

在block之前,你可以往里面写四次

然后你也不能再写了。

当你跟goroutine一起连着用的时候,需要注意。如果你在一个goroutine里面尝试写入,只要你引入了chan作为参数,那不管你写不写,这个资源都被锁住了。

所以比如你有4个goroutine,正确的姿势是make 4个位置的chan,然后再启动goroutine。

万万不可知有一个位置的chan,你起多个goroutine 尝试往里面写内容。

这是要不得的。

写不进去,会导致goroutine 锁住不释放,然后你的内存就释放不了,一直增长。

 

分类: 默认 标签: 发布于: 2022-07-18 12:03:03, 更新于: 2022-07-18 12:07:43