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

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

為什么 net/rpc/client 的 Go 方法需要緩沖通道?

為什么 net/rpc/client 的 Go 方法需要緩沖通道?

Go
躍然一笑 2022-06-21 16:33:30
我無法弄清楚為什么該方法需要您專門提供緩沖通道。從文檔中,func (*Client) 去func (client *Client) Go(serviceMethod string, args interface{}, reply interface{}, done chan *Call) *CallGo 異步調(diào)用函數(shù)。它返回表示調(diào)用的 Call 結(jié)構(gòu)。done 通道將通過返回相同的 Call 對象在調(diào)用完成時發(fā)出信號。如果 done 為 nil,Go 將分配一個新通道。如果非零,done 必須被緩沖,否則 Go 會故意崩潰。
查看完整描述

1 回答

?
白板的微信

TA貢獻(xiàn)1883條經(jīng)驗 獲得超3個贊

LeGEC 在他們的評論中提到了這一點。


進(jìn)一步挖掘,您會在 client.go 中找到這一點


func (call *Call) done() {

    select {

    case call.Done <- call:

        // ok

    default:

        // We don't want to block here. It is the caller's responsibility to make

        // sure the channel has enough buffer space. See comment in Go().

        if debugLog {

            log.Println("rpc: discarding Call reply due to insufficient Done chan capacity")

        }

    }

}

從這里你可以看到,庫期望調(diào)用是完全異步的。這意味著完成通道必須有足夠的容量來完全解耦兩個進(jìn)程(即完全沒有阻塞)。


此外,當(dāng)使用 select 語句時,它是執(zhí)行非阻塞通道操作的慣用方式。


查看完整回答
反對 回復(fù) 2022-06-21
  • 1 回答
  • 0 關(guān)注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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