猿问

有没有办法在不创建新的 goroutine 的情况下回调函数?

我正在尝试在 golang 中实现 Reliable-UDP。

我需要实现的基本功能之一是数据包重传。

幼稚的方法如下:

  1. 发送数据包;

  2. 创建一个计时器(也将创建一个新的 goroutine)来检查在计时器触发之前是否收到了 ACK。

这很简单,但是创建很多 goroutine 并不是免费的。而且我不认为在 TCP 中实现数据包重传使用这种方法。

那么,有没有办法在不创建新的 goroutine 的情况下回调函数?

我已经检查了 golang-nuts ( https://groups.google.com/forum/#!topic/golang-nuts/ja8j7wQUB-0 )的帖子,但仍然找不到解决方案。


牛魔王的故事
浏览 156回答 2
2回答

ITMISS

您想要创建一个包含所有计划超时的单个优先级队列。单个 goroutine 应该检查优先级队列的头部,休眠直到下一次超时,然后执行相关代码或丢弃它。当然,您将需要处理同步问题。Java 方法是通过锁来保护优先级队列。更流行的方法是让超时处理 goroutine 负责排队超时,它通过专用通道接收。package 中container/heap有一个优先队列实现,但我没有检查它有多好。

幕布斯6054654

您可以使用time.NewTicker创建一个计时器对象,这将提供一个定期发送消息的通道。
随时随地看视频慕课网APP

相关分类

Go
我要回答