1、定义一个没有buffer的chan,但是go routine里面可能出现两次write,导致此routine block,线上高并非压力之下,随着内存不断增加,最后OOM,代码示例如下:
func main() {
a := make(chan int)
go getValueRoutine(a)
b := <-a
fmt.Println(b)
}
func getValueRoutine(a chan int) {
if err!=nil{
a <- kongStr
}
a <- realStr
}
2、同理定义带有1个buffer的chan,但是go routine里面可能出现3次write,导致此routine block,随之内存增加
注意:
最好用带buffer的chan,没有buffer的完全阻塞;
对于if else比较多的逻辑,特别注意chan的写入是否及时return;
为什么有一个buffer的channel,出现2次write不会有问题?可以自己思考一下
有疑问加站长微信联系(非本文作者)