【发布时间】:2021-11-23 21:58:35
【问题描述】:
覆盖缓冲区通道超过其容量是否有任何影响?
由于还有另一个 goroutine 并且 main goroutine 没有加入它,所以这里没有死锁
package main
import "fmt"
func main() {
ch := make(chan int, 2)
go func (){
ch <- 1
ch <- 2
ch <- 4//blocks here but scheduler picked up another go routine
ch <- 6
ch <- 10
//close(ch)
}()
fmt.Println(<-ch)
fmt.Println(<-ch)
//for v:=range ch{
//fmt.Println(<-ch)//1 2 4 6 10
//}
}
【问题讨论】:
-
您不能向缓冲通道发送超过其容量的值,进一步的发送被阻止,直到从通道接收到值,为新值腾出空间。这种情况是完全正常的,不会有什么不好的事情发生。
-
@icza 谢谢你的澄清,但如果没有空间接收进一步的发送值将导致阻塞
标签: go concurrency channels