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

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

如何在 Go 中創(chuàng)建共享隊列?

如何在 Go 中創(chuàng)建共享隊列?

Go
白衣非少年 2023-07-26 17:02:11
我正在嘗試為負載均衡器實現(xiàn)最少連接算法。我正在使用優(yōu)先級隊列來按排序順序保留每個服務器的連接數(shù)。這是代碼:server = spq[0]serverNumber = server.valueupdatedPriority = server.priority + 1 // Increment connection count for serverspq.update(server, serverNumber, updatedPriority)targetUrl, err := url.Parse(configuration.Servers[serverNumber])if err != nil {    log.Fatal(err)}// Send the request to the selected serverhttputil.NewSingleHostReverseProxy(targetUrl).ServeHTTP(w, r)updatedPriority = server.priority - 1 // Decrement connection count for serverspq.update(server, serverNumber, updatedPriority)spq我的優(yōu)先隊列在哪里。此代碼將針對平衡器收到的每個請求運行。但在記錄每個請求的隊列狀態(tài)后,我沒有得到正確的結(jié)果。例如,在一種情況下,我看到隊列包含兩次具有不同優(yōu)先級的同一服務器。我確信這與跨請求同步和鎖定隊列有關(guān)。但我不確定在這種特殊情況下正確的方法是什么。
查看完整描述

1 回答

?
慕的地10843

TA貢獻1785條經(jīng)驗 獲得超8個贊

如果這確實是您在多個 goroutine 中運行的代碼,那么您顯然會遇到競爭。

我不明白 spq.update。乍一看,它看起來像是一個對隊列進行重新排序的函數(shù),以使服務器在元素 0 處具有最少調(diào)用次數(shù),但是為什么它同時需要 server 和 serverNumber 呢?serverNumber 似乎是服務器的唯一 ID,既然您已經(jīng)擁有服務器,為什么還需要它?

無論如何,你應該有一個由所有 goroutine 共享的sync.Mutex,并在第一行之前鎖定互斥鎖,并在 spq.update 之后解鎖,還應該在代理調(diào)用后再次鎖定它,并在完成后解鎖。僅當 server 是指針時,從 server.priority 中減去 1 的行才有效。如果它不是指針,您將丟失調(diào)用期間發(fā)生的所有服務器更新。


查看完整回答
反對 回復 2023-07-26
  • 1 回答
  • 0 關(guān)注
  • 91 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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