二十七、有缓冲channel与无缓冲channel

目录

一、写法

二、有无缓冲的区别:

1、串行时

2、并行时


一、写法

在go语言的channel中有两种写法分别是

//无缓冲	
ch := make(chan int)
//有缓冲
ch2 := make(chan int, 2)

二、有无缓冲的区别:

1、串行时

不给缓冲时

func main() {
	ch := make(chan int)
    //发送数据
	ch <- 1
    //读取数据
	s := <-ch
	fmt.Println(s)
}

这里无缓冲会报错,死锁,原因这样执行时候并没有给其空间所以一致卡在发送数据

给缓冲时

func main() {
	ch := make(chan int, 1)
	ch <- 1
	s := <-ch
	fmt.Println(s)
}

当给予缓冲后此时程序运行没有问题,并且能够正常输出1

2、并行时

无缓冲时

func main() {
	ch := make(chan int)
	go func() {
		ch <- 1
	}()
	go func() {
		s := <-ch
		fmt.Println(s)
	}()
	time.Sleep(1 * time.Second)
}

此时可以正常发送与接收到值

你可能感兴趣的:(go,开发语言,golang,后端)