亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                《Go題庫·8》channel實(shí)現(xiàn)方式/原理/概念/底層實(shí)現(xiàn)

                面試企業(yè) 好未來、米哈游、跟誰學(xué),字節(jié)跳動(dòng)、美團(tuán)、網(wǎng)易、新浪、滴滴、小米

                題目解析 GOLANG ROADMA社區(qū)

                答案(知北游)+

                背景:

                • Go語言提供了一種不同的并發(fā)模型–通信順序進(jìn)程(communicating sequential processes,CSP)。
                • 設(shè)計(jì)模式:通過通信的方式共享內(nèi)存
                • channel收發(fā)操作遵循先進(jìn)先出(FIFO)的設(shè)計(jì)

                底層結(jié)構(gòu):

                type hchan struct { qcount uint // channel中的元素個(gè)數(shù) dataqsiz uint // channel中循環(huán)隊(duì)列的長度 buf unsafe.Pointer // channel緩沖區(qū)數(shù)據(jù)指針 elemsize uint16 // buffer中每個(gè)元素的大小 closed uint32 // channel是否已經(jīng)關(guān)閉,0未關(guān)閉 elemtype *_type // channel中的元素的類型 sendx uint // channel發(fā)送操作處理到的位置 recvx uint // channel接收操作處理到的位置 recvq waitq // 等待接收的sudog(sudog為封裝了goroutine和數(shù)據(jù)的結(jié)構(gòu))隊(duì)列由于緩沖區(qū)空間不足而阻塞的Goroutine列表 sendq waitq // 等待發(fā)送的sudogo隊(duì)列,由于緩沖區(qū)空間不足而阻塞的Goroutine列表 lock mutex // 一個(gè)輕量級(jí)鎖}

                channel創(chuàng)建:

                ch := make(chan int, 3)

                • 創(chuàng)建channel實(shí)際上就是在內(nèi)存中實(shí)例化了一個(gè)hchan結(jié)構(gòu)體,并返回一個(gè)chan指針
                • channle在函數(shù)間傳遞都是使用的這個(gè)指針,這就是為什么函數(shù)傳遞中無需使用channel的指針,而是直接用channel就行了,因?yàn)閏hannel本身就是一個(gè)指針

                channel發(fā)送數(shù)據(jù):

                ch <- 1ch <- 2

                • 檢查 recvq 是否為空,如果不為空,則從 recvq 頭部取一個(gè) goroutine,將數(shù)據(jù)發(fā)送過去,并喚醒對(duì)應(yīng)的 goroutine 即可。
                • 如果 recvq 為空,則將數(shù)據(jù)放入到 buffer 中。
                • 如果 buffer 已滿,則將要發(fā)送的數(shù)據(jù)和當(dāng)前 goroutine 打包成 sudog 對(duì)象放入到 sendq中。并將當(dāng)前 goroutine 置為 waiting 狀態(tài)。

                channel接收數(shù)據(jù):

                <-ch<-ch

                • 檢查sendq是否為空,如果不為空,且沒有緩沖區(qū),則從sendq頭部取一個(gè)goroutine,將數(shù)據(jù)讀取出來,并喚醒對(duì)應(yīng)的goroutine,結(jié)束讀取過程。
                • 如果sendq不為空,且有緩沖區(qū),則說明緩沖區(qū)已滿,則從緩沖區(qū)中首部讀出數(shù)據(jù),把sendq頭部的goroutine數(shù)據(jù)寫入緩沖區(qū)尾部,并將goroutine喚醒,結(jié)束讀取過程。
                • 如果sendq為空,緩沖區(qū)有數(shù)據(jù),則直接從緩沖區(qū)讀取數(shù)據(jù),結(jié)束讀取過程。
                • 如果sendq為空,且緩沖區(qū)沒數(shù)據(jù),則只能將當(dāng)前的goroutine加入到recvq,并進(jìn)入waiting狀態(tài),等待被寫goroutine喚醒。

                channel規(guī)則:

                操作

                空channel

                已關(guān)閉channel

                活躍中的channel

                close(ch)

                panic

                panic

                成功關(guān)閉

                ch<- v

                永遠(yuǎn)阻塞

                panic

                成功發(fā)送或阻塞

                v,ok = <-ch

                永遠(yuǎn)阻塞

                不阻塞

                成功接收或阻塞

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年6月23日 06:33
                下一篇 2022年6月23日 06:34

                相關(guān)推薦

                • 2022世界杯比賽什么時(shí)候結(jié)束總共幾天(2022世界杯比賽對(duì)陣圖)

                  2022年卡塔爾世界杯吸引無數(shù)用戶關(guān)注,大家每天也都第一時(shí)間觀看世界杯的比賽情況。那么,2022世界杯比賽什么時(shí)候結(jié)束?本屆世界杯比賽總共幾天時(shí)間呢?很多網(wǎng)友對(duì)于2022年世界杯時(shí)…

                  2022年11月25日
                • 什么是推廣cpa一篇文章帶你看懂CPA推廣渠道

                  CPA渠道 CPA指的是按照指定的行為結(jié)算,可以是搜索,可以是注冊(cè),可以是激活,可以是搜索下載激活,可以是綁卡,實(shí)名認(rèn)證,可以是付費(fèi),可以是瀏覽等等。甲乙雙方可以根據(jù)自己的情況來定…

                  2022年11月25日
                • 抖音直播帶貨有哪些方法技巧(抖音直播帶貨有哪些痛點(diǎn))

                  如今抖音這個(gè)短視頻的變現(xiàn)能力越來越突顯了,尤其是在平臺(tái)上開通直播,更具有超強(qiáng)的帶貨屬性,已經(jīng)有越來越多的普通人加入到其中了。不過直播帶貨雖然很火,但是也不是每個(gè)人都能做好的,那么在…

                  2022年11月24日
                • 《原神》3.2無相交響詩第一天無相之冰怎么打?無相交響詩攻略

                  原神3.2無相交響詩第一天無相之冰怎么打?最近新版本3.2版本的無相交響詩活動(dòng)又開啟了,不少玩家還不清楚具體的玩法,下面一起來看一下原神被隱去的原神3.2無相交響詩第一天無相之冰打…

                  2022年11月24日
                • 淘寶直播平臺(tái)抽成多少(淘寶直播平臺(tái)抽成比例)

                  隨著時(shí)代的發(fā)展,現(xiàn)在直播帶貨已經(jīng)成為主要帶貨方式,其中淘寶是主流帶貨平臺(tái),不少人在上面直播帶貨賺錢,一些小伙伴也想加入,那么淘寶直播平臺(tái)抽成多少?下面小編為大家?guī)硖詫氈辈テ脚_(tái)抽成…

                  2022年11月24日
                • 淘寶直播開通后帶貨鏈接怎么做(淘寶直播需要開通淘寶店鋪嗎)

                  直播帶貨無論是對(duì)于商家來說還是主播收益都是非??捎^的,所以不少平臺(tái)都有直播帶貨功能,一些小伙伴也想加入淘寶直播,那么淘寶直播開通后帶貨鏈接怎么做?下面小編為大家?guī)硖詫氈辈ラ_通后帶…

                  2022年11月24日
                • 園屬于什么結(jié)構(gòu)(園的結(jié)構(gòu)和部首)

                  園 yuán:全包圍結(jié)構(gòu),平穩(wěn)端正中稍帶左收右展。 外部“口” 體態(tài)端莊,稍抗肩,稍帶左輕右重。左豎起筆稍抖,豎身勿重,稍左斜,垂露收筆;第二筆橫折壓著左豎起筆,橫畫稍抗肩,不要重…

                  2022年11月24日
                • 白襯衫搭配什么褲子好看,女生襯衫穿法圖片

                  說起白襯衫和長褲的搭配組合,不知道大家有沒有發(fā)現(xiàn),雖然是很常見的造型,可不同年齡段慣用的穿搭方式卻不相同,從而也穿出了不同的味道。簡直是現(xiàn)在這個(gè)季節(jié),時(shí)髦精們的必備造型之一~ 70…

                  2022年11月24日
                • 明查|美國新冠后遺癥患者中有16%癥狀嚴(yán)重以致無法工作?

                  點(diǎn)擊進(jìn)入澎湃新聞全球事實(shí)核查平臺(tái) 速覽 – 網(wǎng)傳數(shù)據(jù)比例無權(quán)威信源佐證,該比例有可能是結(jié)合了美國疾病防控中心和布魯金斯學(xué)會(huì)的數(shù)據(jù)得出,但這兩個(gè)機(jī)構(gòu)的調(diào)研目的和樣本都不同…

                  2022年11月24日
                • 《原神》畫外旅照青植之篇第七天怎么過?畫外旅照第七天玩法介紹

                  原神的畫外旅照任務(wù)需要玩家達(dá)成一定的要求進(jìn)行拍照,完成任務(wù)可以獲得獎(jiǎng)勵(lì)。很多玩家想知道原神畫外旅照青植之篇第七天怎么過,下面就帶來原神畫外旅照第七天玩法介紹,感興趣的小伙伴不要錯(cuò)過…

                  2022年11月23日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息