成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

徹底搞懂Channel原理之二

開發 前端
我們提到,對channel的操作,本質上就是對hchan里字段的操作。因為在操作的過程中使用了互斥鎖,所以保證了channel的并發安全。

[[427995]]

本文轉載自微信公眾號「吳親強的深夜食堂」,作者吳親庫里。轉載本文請聯系吳親強的深夜食堂公眾號。

上一篇文章主要介紹channel運行時是通過hchan表示的,也簡單說明了hchan各個字段的含義。

我們提到,對channel的操作,本質上就是對hchan里字段的操作。因為在操作的過程中使用了互斥鎖,所以保證了channel的并發安全。

這篇文章主要通過現實生活的一些例子來說明channel的一些原理,當然還是不會涉及過多源碼。

無緩沖

我們都知道,channel分為無緩沖和緩沖。這兩者最大的區別是什么?

我們用一個現實生活的快遞例子來說明。

上面場景是快遞員在等小庫,當然反過來小庫也可能在等快遞員。

如果沒有快遞柜,快遞員在送快遞的過程中,如果家里沒人,他就得在那等著,等著有人來簽收快遞,他才送貨結束。

客戶在快遞員到來之前,他也不能離開家,不然快遞來了沒人收,所以他也得等到快遞員上門,簽字收了快遞,他才算收貨結束。

當然,客戶不止有這家快遞,如果快遞員A在等的時候又來一個快遞員B給他送貨。這個快遞員B不僅得等著,還得排隊。等到客戶到家后,肯定是先簽收A的快遞,然后再簽收B的快遞。

對應到無緩沖channel,

發送數據的時候,如果沒有對應的接收者ready,那么發送者就進入到等待發送隊列中,等待有對應的接收者喚醒它。

接收數據的時候,如果沒有對應的發送者ready,那么接收者就進入到等待接收隊列中,等待有對應的發送者喚醒它。

還記得上一篇文章我們介紹過hchan的結構嗎。

其中recvq表示等待接收消息的隊列,sendq表示等待發送消息的隊列。

我們來看waitq。

本質上waitq就是一個鏈表,更確切的說是一個雙向循環的鏈表。其中waitq記錄了鏈表的頭尾,sudog記錄了當前等待者的上一個等待者(prev)和下一個等待者(next)。

這就好像小庫在簽收完A的快遞后喊,下一個是誰啊?

A會說:我的下一個是B。

B會說:是我。我記得我上一個是A,目前我沒有下一個,所以我是最后一個。

緩沖

看完了無緩沖隊列,我們再來看緩沖隊列。還是用上面的故事,

只要快遞柜有空閑柜子,快遞員就可以直接把快遞放到柜子里,讓客戶自己去柜子拿。如果發送沒有空閑的柜子,那就只能等,等到別人告訴我有空閑柜子,我再把快遞放到空出來的柜子里。

對應到緩沖channel,上面的快遞柜,就是緩沖channel中存儲數據的buffer。

對于發送者來說:只要緩沖區未滿,發送者就可以繼續發送數據存放在緩沖區。一旦緩沖區滿了,發送者就只能進入到等待發送隊列中,等待有對應的接收者喚醒它,然后它再把數據放入到剛剛被取走數據的位置。

對于接收者來說:只要緩沖區不為空,接收者就可以繼續接收數據。一旦緩沖區空了,那么接收者就只能進入到等待接收隊列中,等待有對應的發送者喚醒它。

上面還有什么問題嗎?還真有。

我們取快遞的時候,你一定會按照快遞放入到快遞柜的先后順序取快遞嗎?咋么可能。

但是在channel中,是會保證消息的先進先出(FIFO)關系的。至于咋么保證的,我們終結篇解析代碼細節的時候再說。

總結 

這篇文章主要通過一個快遞的例子來介紹channel操作的原理。下一篇我們介紹channel針對上述處理的細節邏輯。

 

責任編輯:武曉燕 來源: 吳親強的深夜食堂
相關推薦

2021-10-09 19:05:06

channelGo原理

2023-10-18 10:55:55

HashMap

2023-05-29 08:12:38

2021-07-08 10:08:03

DvaJS前端Dva

2022-08-26 13:24:03

version源碼sources

2022-04-24 11:06:54

SpringBootjar代碼

2021-07-16 11:35:20

Java線程池代碼

2025-04-21 04:00:00

2020-04-28 22:12:30

Nginx正向代理反向代理

2017-12-05 17:44:31

機器學習CNN卷積層

2020-10-14 08:50:38

搞懂 Netty 線程

2025-05-06 01:14:00

系統編程響應式

2021-08-18 23:10:56

setState代碼性能

2024-01-03 13:39:00

JS,Javascrip算法

2025-04-11 05:55:00

2025-01-13 16:00:00

服務網關分布式系統架構

2019-07-23 08:55:46

Base64編碼底層

2024-10-15 17:12:38

代碼父子線程開源

2025-03-17 00:21:00

2024-03-08 10:38:07

Vue響應式數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区在线播放 | 日韩免费高清视频 | 欧美日韩中 | 欧美日韩综合一区 | 一区二区三区视频在线观看 | 亚洲综合天堂网 | 亚洲精品视频免费观看 | 亚洲国产精品久久久久秋霞不卡 | 久久久99精品免费观看 | 国产在线二区 | 欧美日韩精品国产 | 中国一级大黄大片 | 中文字幕成人免费视频 | 亚洲福利网站 | 久久国产一区 | 亚洲一区视频在线 | 三区在线观看 | 久久久久久国产精品免费免费狐狸 | 99精品国产一区二区三区 | 天天干成人网 | 免费看黄色视屏 | 国产av毛片 | 国产欧美精品一区二区色综合 | 日韩在线视频观看 | 18gay男同69亚洲网站 | 日韩在线视频免费观看 | 亚洲国产成人在线观看 | 日本天天操| 成人av在线播放 | 啪视频在线 | 欧美成人a∨高清免费观看 欧美日韩中 | 久久69精品久久久久久久电影好 | 一区二区三区欧美在线观看 | 中文字幕亚洲欧美 | 91精品综合久久久久久五月天 | 国产精品日韩欧美一区二区三区 | 观看av | av一二三区 | 亚洲高清在线观看 | 国产一区二区三区在线免费 | 亚洲免费人成在线视频观看 |