golang channel 有缓冲 与 无缓冲 的重要区别

简介: golang channel 有缓冲 与 无缓冲 的重要区别

golang channel 有缓冲 与 无缓冲 是有重要区别的

我之前天真的认为 有缓冲与无缓冲的区别 只是 无缓冲的 是 默认 缓冲 为 1 的缓冲式

其实是彻底错误的,无缓冲的与有缓冲 channel 有着重大差别

那就是一个是同步的 一个是非同步的

怎么说?比如

c1:=make (chan int) 无缓冲

c2:=make (chan int,1) 有缓冲

c1<-1

无缓冲的 不仅仅是 向 c1 通道放 1 而是 一直要有别的携程 <-c1 接手了 这个参数,那么 c1<-1 才会继续下去,要不然就一直阻塞着

而 c2<-1 则不会阻塞,因为缓冲大小是 1 (其实是缓冲大小为 0)只有当 放第二个值的时候 第一个还没被人拿走,这时候才会阻塞。

打个比喻

无缓冲的 就是一个送信人去你家门口送信 ,你不在家 他不走,你一定要接下信,他才会走。

无缓冲保证信能到你手上

有缓冲的 就是一个送信人去你家仍到你家的信箱 转身就走 ,除非你的信箱满了 他必须等信箱空下来。

有缓冲的 保证 信能进你家的邮箱

相关文章
|
5月前
|
Go
golang中make 和 new 的区别
golang中make 和 new 的区别
45 0
|
5月前
|
Go 调度
浅谈Golang通道channel
浅谈Golang通道channel
57 0
|
12月前
|
缓存 编译器 Go
Golang 语言 vendor 在 GOPATH 和 Modules 中的区别
Golang 语言 vendor 在 GOPATH 和 Modules 中的区别
57 0
|
12月前
|
Go
Golang 语言 for 和 for-range 的区别
Golang 语言 for 和 for-range 的区别
81 0
|
12月前
|
安全 Go
Golang 语言使用 channel 并发编程
Golang 语言使用 channel 并发编程
43 0
|
12月前
|
安全 Go 索引
Golang 语言中的 channel 实现原理
Golang 语言中的 channel 实现原理
53 0
|
12月前
|
消息中间件 缓存 Go
Golang 语言中 Channel 的使用方式
Golang 语言中 Channel 的使用方式
44 0
|
1月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
53 4
Golang语言之管道channel快速入门篇
|
5月前
|
Go
golang中置new()函数和make()函数的区别
golang中置new()函数和make()函数的区别
|
2月前
|
存储 消息中间件 缓存