我正在尝试在 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 关注
- 155 浏览
添加回答
举报
0/150
提交
取消