亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

溫暖工人的Go工人模式

溫暖工人的Go工人模式

Go
飲歌長嘯 2023-07-31 16:03:28
我正在解決一個問題,我有一組“熱情的工人”。這意味著它們被維護在內存中,維護自己的上下文并且是可調用的。我一直在研究各種 Go Worker 實現,但都依賴于閉包或返回結果的簡單計算函數。我找到了一個工作人員的示例,它可以讓我啟動上下文并根據最大隊列和最大例程限制將任務分配給它們: https: //github.com/cahitbeyaz/job-worker/blob/master/main.go #L131然而,這種模式不允許我從上下文返回結果并將其反饋回來。我還使用 Web 服務器,因此 Web 處理程序必須接收結果并做出相應響應。是否有我應該/可以遵循的特定/更好的模式,或者我可以適應工作人員示例的方法?附言。起初我以為我可以創建一個 ResultQueue,其中結果被推回并由 Web 處理程序使用。不過,我認為隊列的順序不可靠。
查看完整描述

1 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

解決方案非常簡單(我確實把它復雜化了)。不確定這實際上有多有效,但懷疑它并不太糟糕。仍然歡迎提出更好模式的建議:


在作業定義中聲明一個通道來反饋結果:


type Job struct {

    Request string

    Params  []string

    Result chan Result

}

在你的工作進程中,而不是僅僅返回返回值,而是通過通道傳遞結果結構:


job.Result <- Result{

    Response: result.String(),

    Headers:  []string{},

}

現在,在 Web 處理程序中,只需等待通道即可:


disatcher.jobQueue <- job

result := <- job.Result

愚蠢的我。不知道為什么要花2個小時的努力。:-p 經驗教訓:Go 并發性非常強大。只是別想太多。


查看完整回答
反對 回復 2023-07-31
  • 1 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號