我正在嘗試在 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
有一個優先隊列實現,但我沒有檢查它有多好。
- 2 回答
- 0 關注
- 180 瀏覽
添加回答
舉報
0/150
提交
取消