日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
徹底搞懂Channel原理之二

本文轉(zhuǎn)載自微信公眾號(hào)「吳親強(qiáng)的深夜食堂」,作者吳親庫里。轉(zhuǎn)載本文請聯(lián)系吳親強(qiáng)的深夜食堂公眾號(hào)。

公司主營業(yè)務(wù):成都網(wǎng)站制作、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出溧陽免費(fèi)做網(wǎng)站回饋大家。

上一篇文章主要介紹channel運(yùn)行時(shí)是通過hchan表示的,也簡單說明了hchan各個(gè)字段的含義。

我們提到,對(duì)channel的操作,本質(zhì)上就是對(duì)hchan里字段的操作。因?yàn)樵诓僮鞯倪^程中使用了互斥鎖,所以保證了channel的并發(fā)安全。

這篇文章主要通過現(xiàn)實(shí)生活的一些例子來說明channel的一些原理,當(dāng)然還是不會(huì)涉及過多源碼。

無緩沖

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

我們用一個(gè)現(xiàn)實(shí)生活的快遞例子來說明。

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

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

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

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

對(duì)應(yīng)到無緩沖channel,

發(fā)送數(shù)據(jù)的時(shí)候,如果沒有對(duì)應(yīng)的接收者ready,那么發(fā)送者就進(jìn)入到等待發(fā)送隊(duì)列中,等待有對(duì)應(yīng)的接收者喚醒它。

接收數(shù)據(jù)的時(shí)候,如果沒有對(duì)應(yīng)的發(fā)送者ready,那么接收者就進(jìn)入到等待接收隊(duì)列中,等待有對(duì)應(yīng)的發(fā)送者喚醒它。

還記得上一篇文章我們介紹過hchan的結(jié)構(gòu)嗎。

其中recvq表示等待接收消息的隊(duì)列,sendq表示等待發(fā)送消息的隊(duì)列。

我們來看waitq。

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

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

A會(huì)說:我的下一個(gè)是B。

B會(huì)說:是我。我記得我上一個(gè)是A,目前我沒有下一個(gè),所以我是最后一個(gè)。

緩沖

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

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

對(duì)應(yīng)到緩沖channel,上面的快遞柜,就是緩沖channel中存儲(chǔ)數(shù)據(jù)的buffer。

對(duì)于發(fā)送者來說:只要緩沖區(qū)未滿,發(fā)送者就可以繼續(xù)發(fā)送數(shù)據(jù)存放在緩沖區(qū)。一旦緩沖區(qū)滿了,發(fā)送者就只能進(jìn)入到等待發(fā)送隊(duì)列中,等待有對(duì)應(yīng)的接收者喚醒它,然后它再把數(shù)據(jù)放入到剛剛被取走數(shù)據(jù)的位置。

對(duì)于接收者來說:只要緩沖區(qū)不為空,接收者就可以繼續(xù)接收數(shù)據(jù)。一旦緩沖區(qū)空了,那么接收者就只能進(jìn)入到等待接收隊(duì)列中,等待有對(duì)應(yīng)的發(fā)送者喚醒它。

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

我們?nèi)】爝f的時(shí)候,你一定會(huì)按照快遞放入到快遞柜的先后順序取快遞嗎?咋么可能。

但是在channel中,是會(huì)保證消息的先進(jìn)先出(FIFO)關(guān)系的。至于咋么保證的,我們終結(jié)篇解析代碼細(xì)節(jié)的時(shí)候再說。

總結(jié) 

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


本文標(biāo)題:徹底搞懂Channel原理之二
當(dāng)前URL:http://www.dlmjj.cn/article/cdicpgp.html