go无缓冲信道与缓冲信道区别(实验)
无缓冲信道
发送和接收操作在另一端准备好之前都会阻塞。
这使得 Go 程可以在没有显式的锁或竞态变量的情况下进行同步。
死锁的情况:
//fatal error: all goroutines are asleep - deadlock!
package main
func main() {
c := make(chan int)
func(c chan int) {
c <- 1
}(c)
<-c
}
改正:在信道写入的同时,需要读段读数据,否则程序阻塞陷入死锁状态
缓冲信道
仅当信道的缓冲区填满后,向其发送数据时才会阻塞。当缓冲区为空时,接受方会阻塞。
正常情况:只要一次性写入不超过缓冲区大小,则不会造成阻塞
package main
func main() {
c := make(chan int, 1)
func(c chan