文档章节

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

tree2013
 tree2013
发布于 2016/10/07 17:17
字数 389
阅读 118
收藏 0

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

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

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

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

怎么说?比如

c1:=make(chan int)        无缓冲

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

c1<-1                            

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

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

打个比喻

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

无缓冲保证信能到你手上

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

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

++++++++++++++++++++++++++++++++++++++

【我总结的】没有缓冲的Channel是一直阻塞着直到能从chan中取到数据为止,有缓冲的channel是阻塞着只要能取到一个就执行主线程的代码!

© 著作权归作者所有

下一篇: go语言JSON处理
tree2013
粉丝 27
博文 194
码字总数 62280
作品 0
武汉
后端工程师
私信 提问
加载中

评论(0)

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

golang channel 有缓冲 与 无缓冲 是有重要区别的 我之前天真的认为 有缓冲与无缓冲的区别 只是 无缓冲的 是 默认 缓冲 为1 的缓冲式 其实是彻底错误的,无缓冲的与有缓冲channel有着重大差别...

健哥大人
2013/08/01
6.2K
3
Golang 入门 : channel(通道)

笔者在《Golang 入门 : 竞争条件》一文中介绍了 Golang 并发编程中需要面对的竞争条件。本文我们就介绍如何使用 Golang 提供的 channel(通道) 消除竞争条件。 Channel 是 Golang 在语言级别提...

osc_d4gurmqk
04/16
6
0
Golang 中的并发限制与超时控制

前言 上回在 用 Go 写一个轻量级的 ssh 批量操作工具 里提及过,我们做 Golang 并发的时候要对并发进行限制,对 goroutine 的执行要有超时控制。那会没有细说,这里展开讨论一下。 以下示例代...

小冯冯
2018/02/09
69
0
golang中并发sync和channel

golang中实现并发非常简单,只需在需要并发的函数前面添加关键字"go",但是如何处理go并发机制中不同goroutine之间的同步与通信,golang 中提供了sync包和channel机制来解决这一问题. sync...

osc_8wdrnwp2
2018/08/17
7
0
goroutine, channel 和 CSP

引子 老听 clojure 社区的人提起 core.async ,说它如何好用,如何简化了并发编程的模型,不由得勾起了我的好奇心,想了解一番其思想的源头:CSP 模型及受其启发的 goroutine 和 channel 。 ...

wangxuwei
2018/01/29
133
0

没有更多内容

加载失败,请刷新页面

加载更多

一言难尽,Jpa这个功能差点让我丢了工作

故事背景 前阵子,有位朋友在微信上问我数据被删了能不能恢复,我问了下原因,居然是因为一个配置项惹的祸。 故事细节 在 Spring Boot 中使用 jpa 来操作数据库,jpa 就不做详细的介绍了,相...

osc_axe50nd6
16分钟前
12
0
Link Cut Tree

//知识点 : LCT /*By:Luckyblock*/#include <cstdio>#include <ctype.h>#include <algorithm>#define ls (t[x].son[0])#define rs (t[x].son[1])const int kMaxn = 1e5 + 10;//===......

osc_q5urtsdm
17分钟前
25
0
【问题】Could not locate PropertySource and the fail fast property is set, failing

这是我遇到的问题 Could not locate PropertySource and the fail fast property is set, failing springcloud的其他服务读取不了配置中心得配置文件出错,原因是配置中心的一个配置文件有s...

osc_z9jr2tjo
19分钟前
14
0
Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(四)

在上一讲中,我们已经完成了一个完整的案例,在这个案例中,我们可以通过Angular单页面应用(SPA)进行登录,然后通过后端的Ocelot API网关整合IdentityServer4完成身份认证。在本讲中,我们...

osc_doeya1ck
20分钟前
16
0
[推荐]大量 Blazor 学习资源(一)

前言 / Introduction Blazor 是什么? Blazor 允许您使用 C# 而不是 JavaScript 构建交互式 Web UI。 Blazor 应用由使用 C#、HTML 和 CSS 实现的可重用 Web UI 组件组成。客户端和服务器代码...

osc_3r4js8qy
21分钟前
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部