1. 无缓冲的通道
无缓冲的通道(unbuffered channel)是指在接收前没有能力保存任何值的通道。
这种类型的通道要求发送 goroutine 和接收 goroutine 同时准备好,才能完成发送和接收操作。
如果两个 goroutine 没有同时准备好,通道会导致先执行发送或接收操作的 goroutine 阻塞等待。这种对通道进行发送和接收的交互行为本身就是同步的。其中任意一个操作都无法离开另一个操作单独存在。
下图展示两个 goroutine 如何利用无缓冲的通道来共享一个值。
- 两个
goroutine都到达通道,但两者都没有开始执行发送或者接收。 - 左侧的
goroutine将它的手伸进了通道,这模拟了向通道发送数据的行为。这时,这个goroutine会在通道中被锁住,直到交换完成。 - 右侧的
goroutine将它的手放入通道,这模拟了从通道里接收数据。这个goroutine一样也会在通道中被锁住,直到交换完成。 - 进行交换。
- 右侧的
goroutine拿到数据。 - 两个
goroutine都将它们的手从通道里拿出来,这模拟了被锁住的goroutine得到释放。两个
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



