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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為兩個(gè)以上的 goroutine 做通道

為兩個(gè)以上的 goroutine 做通道

Go
湖上湖 2021-06-09 05:01:46
我不喜歡 Go 的一件事是通道接收也會(huì)從通道中刪除數(shù)據(jù)。這僅允許兩個(gè) goroutine 相互通信,即使有幾種情況下兩個(gè)或多個(gè) goroutine 應(yīng)該能夠相互通信。我知道我可以創(chuàng)建一組通道并為每個(gè) goroutine 設(shè)置通道,但是將數(shù)據(jù)從一個(gè) goroutine 移動(dòng)到所有其他 goroutine 比將數(shù)據(jù)的一個(gè)副本移動(dòng)到所有 goroutine 上的數(shù)據(jù)要多得多??紤]一個(gè)案例,當(dāng)我有數(shù)千個(gè)客戶端連接到服務(wù)器,我希望一個(gè)只向其中一半發(fā)送消息,即接收該消息的 500 個(gè) goroutine。如果消息是 512 字節(jié),這將在 ram 移動(dòng)中變成 250 KB 的數(shù)據(jù),即使如果通道在接收時(shí)不刪除數(shù)據(jù),則可能只移動(dòng)一次相同的數(shù)據(jù)。所以我問(wèn)是否有一些簡(jiǎn)單的方法可以做到這一點(diǎn),還是我必須使用同步包中的互斥鎖?雖然請(qǐng)告訴我是否計(jì)算錯(cuò)誤并且通道不復(fù)制數(shù)據(jù),因?yàn)樵谶@種情況下我只能管理通道數(shù)組。
查看完整描述

2 回答

?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊

我通常做這樣的事情:


type Message struct {

    text string

    address string

    ...

}


type Server {

    dropbox chan Message

    clients []*Conn

    ...

}


type Conn {

    inbox chan *Message

    ...

}

每個(gè)客戶端,由讀/寫 go 例程提供服務(wù),將“消息”放入“保管箱”。服務(wù)器從“保管箱”中提取消息,并根據(jù)“地址”確定將消息發(fā)送到哪些客戶端。


在服務(wù)器中,“客戶端”甚至可以是地圖。這實(shí)際上取決于您希望如何路由消息:特定的客戶端、組等。


你可以用 做一些聰明的事情chan chan T,但是如果你想做智能路由而不是盲目的廣播,你真的需要某種方式將消息映射到客戶端。


在這種情況下,您不需要互斥鎖。在某些情況下,互斥體是最好的,但在這種情況下,通道要容易得多。


查看完整回答
反對(duì) 回復(fù) 2021-06-21
  • 2 回答
  • 0 關(guān)注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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