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

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

有沒有辦法在不創建新的 goroutine 的情況下回調函數?

有沒有辦法在不創建新的 goroutine 的情況下回調函數?

Go
牛魔王的故事 2021-11-22 15:30:04
我正在嘗試在 golang 中實現 Reliable-UDP。我需要實現的基本功能之一是數據包重傳。幼稚的方法如下:發送數據包;創建一個計時器(也將創建一個新的 goroutine)來檢查在計時器觸發之前是否收到了 ACK。這很簡單,但是創建很多 goroutine 并不是免費的。而且我不認為在 TCP 中實現數據包重傳使用這種方法。那么,有沒有辦法在不創建新的 goroutine 的情況下回調函數?我已經檢查了 golang-nuts ( https://groups.google.com/forum/#!topic/golang-nuts/ja8j7wQUB-0 )的帖子,但仍然找不到解決方案。
查看完整描述

2 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

您想要創建一個包含所有計劃超時的單個優先級隊列。單個 goroutine 應該檢查優先級隊列的頭部,休眠直到下一次超時,然后執行相關代碼或丟棄它。

當然,您將需要處理同步問題。Java 方法是通過鎖來保護優先級隊列。更流行的方法是讓超時處理 goroutine 負責排隊超時,它通過專用通道接收。

package 中container/heap有一個優先隊列實現,但我沒有檢查它有多好。


查看完整回答
反對 回復 2021-11-22
?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

您可以使用time.NewTicker創建一個計時器對象,這將提供一個定期發送消息的通道。


查看完整回答
反對 回復 2021-11-22
  • 2 回答
  • 0 關注
  • 180 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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