第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang中通道緩沖容量為0和1的區(qū)別

golang中通道緩沖容量為0和1的區(qū)別

Go
DIEA 2023-05-08 16:31:11
我已將通道緩沖區(qū)大小設(shè)置為零,例如var intChannelZero = make(chan int),當(dāng)從中獲取值時intChannelZero將被阻塞,直到intChannelZero具有值。此外,我將通道緩沖區(qū)大小設(shè)置為 1,例如var intChannelOne = make(chan int, 1),當(dāng)從 獲取值時intChannelOne將被阻塞,直到intChannelOne具有值。我們知道的容量intChannelZero是零,容量intChannelOne是一,所以我想知道:intChannelZero給like賦值時intChannelZero <- 1,值保存在哪里?為它們賦值時intChannelZero以及賦值時的差異。intChannelOne誰能在Golang Runtime Enviroment 層面解釋一下?多謝。
查看完整描述

2 回答

?
心有法竹

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個贊

如果通道是無緩沖的(容量為零),則只有當(dāng)發(fā)送方和接收方都準(zhǔn)備就緒時,通信才會成功。

如果通道已緩沖(容量 >= 1),則如果通道未滿則發(fā)送成功且不會阻塞,如果緩沖區(qū)不為空則接收成功且不會阻塞。

當(dāng)像 intChannelZero <- 1 那樣將值賦給 intChannelZero 時,該值保存在哪里?

該值從發(fā)送方復(fù)制到接收方。除了實(shí)現(xiàn)可能使用的任何臨時變量外,該值不會保存在任何地方。

intChannelZero 和 intChannelOne 賦值時的區(qū)別。

在 intChannelZero 塊上發(fā)送,直到接收器準(zhǔn)備就緒。

發(fā)送 intChannelOne 塊,直到緩沖區(qū)中有可用空間。


查看完整回答
反對 回復(fù) 2023-05-08
?
拉丁的傳說

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個贊

無緩沖和緩沖通道的區(qū)別在于,

  1. 發(fā)送到頻道被阻止

  2. 從通道接收被阻止

對于無緩沖通道

如果頻道已經(jīng)發(fā)送消息但尚未收到,則發(fā)送將被阻止。

如果從未發(fā)生過發(fā)送,則接收將被阻止。

對于緩沖通道

如果已經(jīng)發(fā)生 n(channel size) 次發(fā)送并且沒有收到任何發(fā)送,則發(fā)送將被阻止。即整個通道大小已被發(fā)送的消息使用,但沒有收到任何消息。

如果緩沖區(qū)為空,即沒有任何未使用的發(fā)送,則接收將被阻止

運(yùn)行時錯誤

接收阻塞將拋出波紋管錯誤

fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan receive]:

發(fā)送被阻止將拋出波紋管錯誤

fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan send]:


查看完整回答
反對 回復(fù) 2023-05-08
  • 2 回答
  • 0 關(guān)注
  • 255 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號