彻底搞懂Channel原理之二

本文转载自微信公众号「吴亲强的彻底深夜食堂」,作者吴亲库里。搞懂转载本文请联系吴亲强的彻底深夜食堂公众号。
上一篇文章主要介绍channel运行时是搞懂通过hchan表示的,也简单说明了hchan各个字段的彻底含义。
我们提到,搞懂对channel的彻底操作,本质上就是搞懂对hchan里字段的操作。因为在操作的彻底过程中使用了互斥锁,所以保证了channel的搞懂并发安全。
这篇文章主要通过现实生活的彻底一些例子来说明channel的一些原理,当然还是搞懂不会涉及过多源码。
无缓冲
我们都知道,彻底channel分为无缓冲和缓冲。搞懂这两者最大的彻底区别是什么?
我们用一个现实生活的快递例子来说明。

上面场景是快递员在等小库,当然反过来小库也可能在等快递员。免费信息发布网

如果没有快递柜,快递员在送快递的过程中,如果家里没人,他就得在那等着,等着有人来签收快递,他才送货结束。
客户在快递员到来之前,他也不能离开家,不然快递来了没人收,所以他也得等到快递员上门,签字收了快递,他才算收货结束。
当然,客户不止有这家快递,如果快递员A在等的时候又来一个快递员B给他送货。这个快递员B不仅得等着,还得排队。等到客户到家后,肯定是先签收A的快递,然后再签收B的快递。
对应到无缓冲channel,
发送数据的时候,如果没有对应的接收者ready,那么发送者就进入到等待发送队列中,等待有对应的接收者唤醒它。b2b信息网
接收数据的时候,如果没有对应的发送者ready,那么接收者就进入到等待接收队列中,等待有对应的发送者唤醒它。
还记得上一篇文章我们介绍过hchan的结构吗。

其中recvq表示等待接收消息的队列,sendq表示等待发送消息的队列。
我们来看waitq。


本质上waitq就是一个链表,更确切的说是一个双向循环的链表。其中waitq记录了链表的头尾,sudog记录了当前等待者的上一个等待者(prev)和下一个等待者(next)。
这就好像小库在签收完A的快递后喊,下一个是谁啊?
A会说:我的下一个是B。
B会说:是我。我记得我上一个是服务器租用A,目前我没有下一个,所以我是最后一个。
缓冲
看完了无缓冲队列,我们再来看缓冲队列。还是用上面的故事,

只要快递柜有空闲柜子,快递员就可以直接把快递放到柜子里,让客户自己去柜子拿。如果发送没有空闲的柜子,那就只能等,等到别人告诉我有空闲柜子,我再把快递放到空出来的柜子里。
对应到缓冲channel,上面的快递柜,就是缓冲channel中存储数据的buffer。
对于发送者来说:只要缓冲区未满,发送者就可以继续发送数据存放在缓冲区。一旦缓冲区满了,发送者就只能进入到等待发送队列中,等待有对应的接收者唤醒它,然后它再把数据放入到刚刚被取走数据的位置。
对于接收者来说:只要缓冲区不为空,接收者就可以继续接收数据。一旦缓冲区空了,那么接收者就只能进入到等待接收队列中,等待有对应的发送者唤醒它。
上面还有什么问题吗?还真有。
我们取快递的时候,你一定会按照快递放入到快递柜的先后顺序取快递吗?咋么可能。
但是在channel中,是会保证消息的先进先出(FIFO)关系的。至于咋么保证的,我们终结篇解析代码细节的时候再说。
总结
这篇文章主要通过一个快递的例子来介绍channel操作的原理。下一篇我们介绍channel针对上述处理的细节逻辑。
相关文章
opoor11plus的优势与使用经验分享(一款高性价比的智能手机,为您带来卓越的使用体验)
摘要:随着科技的发展,智能手机已经成为了人们生活中不可或缺的一部分。而在众多智能手机品牌中,opoor11plus以其出色的性能和亲民的价格受到了广大消费者的青睐。本文将从多个方面为您详...2025-11-05长虹49U3C电视(领先技术打造沉浸式家庭娱乐,以及一键操作带来的便捷生活)
摘要:现代科技的不断进步使得电视逐渐成为了家庭娱乐中不可或缺的一部分。长虹49U3C电视作为一款拥有出色画质和智能功能的产品,为用户提供了令人赞叹的视觉体验和便捷的操作方式。本文将从多个...2025-11-05长虹49U3C电视(领先技术打造沉浸式家庭娱乐,以及一键操作带来的便捷生活)
摘要:现代科技的不断进步使得电视逐渐成为了家庭娱乐中不可或缺的一部分。长虹49U3C电视作为一款拥有出色画质和智能功能的产品,为用户提供了令人赞叹的视觉体验和便捷的操作方式。本文将从多个...2025-11-05联想小新i2000换键盘教程(小白也能搞定!详解联想小新i2000键盘更换步骤及注意事项)
摘要:联想小新i2000作为一款广受欢迎的笔记本电脑,键盘是我们日常使用中最频繁的部件之一。长时间使用后,键盘可能会出现键位失灵或损坏的情况。本文将详细介绍联想小新i2000换键盘的步骤...2025-11-05- 摘要:在现代社会,手游已经成为人们生活中不可或缺的一部分,然而有些人希望能够同时运行多个游戏账号或进行多项操作,这就需要双开手游。本文将详细介绍如何在平板电脑上实现双开手游,并提供实用技...2025-11-05
联想YogaA12插U盘教程(简单快捷的U盘插入教程,助您随时备份与存储重要数据)
摘要:在日常使用中,我们经常需要进行数据传输、备份和存储,而联想YogaA12作为一款灵活多变的设备,其U盘插入功能能够轻松满足我们的需求。本教程将详细介绍如何在YogaA12上插入U盘...2025-11-05

最新评论