首页>行情>正文
[Golang]Go的channel 每日关注
2023-03-15 13:07:34    来源:腾讯云

概论

Go语言官网中,是这么定义Channel这个类型的。


(资料图)

A channel provides a mechanism for [concurrently executing functions] (golang.google.cn/ref/spec#Go…) to communicate by sending and receiving values of a specified element type. The value of an uninitialized channel is nil. 通道为并发执行函数提供了一种机制,通过发送和接收指定元素类型的值来进行通信。 未初始化通道的值为 nil。

“不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存。” 这句话体现了Go语言对于并发设计的理念,channel也是实现CSP理论的重要一员。

基本操作

言归正传,下面我们具体聊聊Channel

对于我来说,通道分两种:

无缓冲:无缓冲的在并发编程中,体现在同步。有缓存:有缓冲则体现在异步。

有无缓冲的通道的创建相差不多,只是参数的差异

Talk is cheap, show me the code —— Linux创始人Linus

下面我们通过一段简单的代码,来描述通道的创建和操作。

//同步通道     ch1 := make(chan int)     //异步通道, 缓冲区大小为1     ch2 := make(chan int, 1) ​     //写数据     ch2 <- 1     //取数据     <- ch2     //关闭一个channel     close(ch2)复制代码

把上面我们创建通道,其中包括int指定通道中可以放如的类型。

要理解通道,我们可以先把他当作一个FIFO的队列。

我们可以把ch2类比成一个可以放一个元素的队列。

那么ch1呢? 是能放0个元素的通道? 是的,没错!那么怎么通过ch1进行协程间通讯呢?

还记得我们在最上面说过,Channel分两种, 有一种是同步的吗?也就是说,两个协程,要通过 ch1做通讯,他们必须"握手"。一个协程往ch1中放数据的时候,必须阻塞等待有另外一个携程过来取,发生握手交换数据。

协程对channel的读写流程:

发送方向缓冲区写入数据,会唤醒等待接受的接收方,多个接收方会尝试从缓冲区中读取数据,如果没有读取到会重新陷入休眠;接收方从缓冲区中读取数据,会唤醒等待写入发送方,发送方会尝试向缓冲区写入数据,如果缓冲区已满会重新陷入休眠;

遇到过的坑

已经关闭的chan不能写,可以读对于channel的遍历最好使用range

源码

Channel的操作比较简单,下面我们通过Go的源码,看看的内部是如何实现的。chan的结构体定义在${GOROOT}/src/runtime/chan.go中。

​ type hchan struct {     qcount   uint           // total data in the queue     dataqsiz uint           // size of the circular queue ​     buf      unsafe.Pointer // points to an array of dataqsiz elements     elemsize uint16     closed   uint32     elemtype *_type // element type     sendx    uint   // send index     recvx    uint   // receive index     recvq    waitq  // list of recv waiters     sendq    waitq  // list of send waiters ​     // lock protects all fields in hchan, as well as several     // fields in sudogs blocked on this channel.     //     // Do not change another G"s status while holding this lock     // (in particular, do not ready a G), as this can deadlock     // with stack shrinking.     lock mutex } ​复制代码
qcount— Channel 中的元素个数;dataqsiz— Channel 中的循环队列的长度;buf— Channel 的缓冲区数据指针;sendx— Channel 的发送操作处理到的位置;recvx— Channel 的接收操作处理到的位置;

通过上面的结构体,我么可以抽象出下面一幅图:

小结

channel是并发控制中的新成员,虽然他内部也有锁,但是对于我们来说他是无感的,在官方网络库中,Go使用很多通道来做并发控制。

作者:OpenStack链接:https://juejin.cn/post/7010772020459733005来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

关键词:

[Golang]Go的channel 每日关注

“不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存。”这句话体现了Go语言对于并发设计的理念,channel也是实现CSP理论的重2023-03-15

东方甄选回应养殖虾当野生虾卖是什么情况 天天视点

东方甄选回应养殖虾当野生虾卖今天的热度非常高,现在也是在热搜榜上了,那么具体的东方甄选回应养殖虾当野生虾卖是什么情况呢,大家可以一起2023-03-15

今日热门!入户门那种锁最安全(入户门密码锁安全吗)

1、指纹密码锁采用目前先进的指纹传感器,识别程度准确。2、使用指纹防盗门有效地拒绝指纹套和人工指纹等假指纹。3、打开指纹防盗门的方法有指2023-03-15

联想m7605d打印机驱动下载_联想m7605d打印机驱动-天天速看

1、需要到官网下载联想打印机m7605d驱动,然后点击下载安装,点击安装完成之后。2、插入打印机数据线,就可以使用了。本2023-03-15

金融学算什么学科_金融学属于什么学科门类-视讯

1、经济学包括两个一级学科,理论经济学和应用经济学,金融学是应用经济学下的二级学科。2、金融学(Finance),是以2023-03-15

最新资讯:美债收益率创十几年新高,去年跑赢大盘的高派息股不再受宠?

去年,派息率最高的股票来自许多传统经济行业。这些企业虽然在增加销售额和利润方面不及科技行业等新兴行业,但通常拥有成熟的运营,能够产生2023-03-14

拓展新型业态 提振消费信心 襄阳市2023年消费者权益保护专题新闻发布会召开-看热讯

拓展新型业态提振消费信心襄阳市2023年消费者权益保护专题新闻发布会召开---2023-03-14

sideshow鹰女_鹰女的人物简介|环球新资讯

1、鹰女是外星球Thanagara的侦探,为了执行任务来到地球,在地球上隐藏真实身份,以鹰女侠的身份参与到人类社会中,维2023-03-14

世界微动态丨大学入学感言 入学感言

1、很快,我迎来了xx生活。2、我们将面临更大的学习任务,因此,我们首先要制定一份详细,完备的学习计划,因为凡事预则立,2023-03-14

【翻译】全网较准确《Apple》歌词(双语&角色应援色) 战姬绝唱G伊芙姐妹插曲|世界快播

请首次看我的翻译的各位务必先看完下面这几段需知&置顶动态。※原歌词著作权属于原著作权人,本文翻译仅供学习交流,喜欢请购买正版支持官方。2023-03-14

官宣!保时捷 Cayenne纯电版2025年后推出|环球观察

保时捷卡宴纯电版你冲不冲?在3月13日召开的保时捷2023年度新闻发布会上,保时捷宣布第四代Cayenne(图片|配置|询价)将会推出纯电车型,其将在2022023-03-14

2020年一建教材什么时候出的(2020年一级建造师教材什么时候出)

1、2020的造价工程师考试终于在年底先后落下帷幕,再回首,感觉像一场梦 两个考试的成绩应该会在12月底前公布,下面说说两个考试有什么异2023-03-14

首店又来了,武汉天地商圈持续上新-全球今亮点

首店又来了,武汉天地商圈持续上新---湖北日报讯(记者马文俊、通讯员李慧赐)3月13日,位于武汉天地黄油与面包华中首店门前,从两岸三镇赶来2023-03-13

梅雨季节注意什么_梅雨季节注意哪些

1、1、注意卫生2、梅雨季节天气闷热潮湿,真菌异常活跃,所以要注意卫生。衣物要注意经常换洗,衣服洗了很难干,所以要选择易2023-03-13

上海建工:下属公司联合体2.65亿元在上海嘉定拿地_天天微动态

上海建工3月13日公告,当日,公司下属上海长荧企业管理合伙企业、嘉兴建翊投资有限公司组建联合体,参加了上海市嘉定区规划和自然资源局组织的2023-03-13

海通国际发布同益中研报,首次覆盖:防弹装备市场高景气,“自建 + 收购”推动产能扩张 全球新视野

每经AI快讯,海通国际03月13日发布研报称,给予同益中(688722 SH,最新价:19 98元)优于大市评级,目标价格为27 00元。评级理由主要包括:12023-03-13

硅谷银行破产 多家上市公司紧急回应:对公司无重大影响

3月13日,多家港股上市公司公告称,硅谷银行事态发展不会对公司运营产生重大影响。多家A股上市公司在投资者互动平台表示,公司在硅谷银行没有2023-03-13

亚香股份:3月10日融券净卖出400股,连续3日累计净卖出900股|世界报资讯

3月10日,亚香股份(301220)融资买入144 66万元,融资偿还114 9万元,融资净买入29 75万元,融资余额3305 88万元。2023-03-13

世界速递!熵增原理在生活中的应用_熵增原理

1、熵的定义如下。2、假设在不改变宏观物质的表现的情况下,微观分子的可能排列的总数为W则熵S=lgW譬如,一个很乱2023-03-13

每日速读!诛仙3魔焚香技能天书详细加点_诛仙3焚香完美加点

1、技能  少侠重击2警觉6共8点  一重星火3锋芒6丰脉8原灵6明觉1共24点  二重烈焰1御空2023-03-13

糠酸莫米松乳膏可以涂脸吗脸:豆豆_糠酸莫米松乳膏能涂脸吗-前沿热点

1、糠酸莫米松乳膏是一种糖皮质激素,具有抗炎和抗过敏作用,主要用于治疗皮炎和湿疹。2、如果疾病发生在脸上,糠酸莫米松乳膏2023-03-12

厦门市音乐学校计划招生450余名 3月16日开始报名

厦门网讯(厦门晚报记者郭文娟)昨天,厦门市音乐学校发布招生简章,计划招收450余名学生,包含小学一年级专业班新生、四五2023-03-12

实时焦点:阿邦拉霍:曼城不太可能让坎塞洛回归,瓜帅不满他的训练和态度

前英超名将阿邦拉霍接受媒体FootballInsider的采访时表示,他认为曼城不太可能让坎塞洛回归,瓜帅不想要无法在训练中做到100%投入的球员。坎塞洛冬2023-03-12

民政部:规范社会组织评估等级牌匾证书管理 做好社会组织评估等级报备工作|世界快播报

民政部官网12月27日消息,民政部办公厅发布关于规范社会组织评估等级牌匾证书管理、做好社会组织评估等级报备工作的通知。社2023-03-12

全国每年新发恶性肿瘤40%在农村 基层防治需求非常大!|当前快讯

全国每年新发恶性肿瘤40%在农村基层防治需求非常大!今天的关注度非常高,直接上了热搜榜,那么具体的是什么情况呢,大家可2023-03-12