有没有一种方法可以在不创建新goroutine的情况下回调函数?

有没有一种方法可以在不创建新goroutine的情况下回调函数?,go,tcp,timer,rudp,Go,Tcp,Timer,Rudp,我正在尝试在golang中实现可靠的UDP 我需要实现的一个基本特性是数据包重传 朴素的方法如下: 发送数据包 创建一个计时器(也将创建一个新的goroutine),以检查在计时器触发之前是否收到ACK 这很简单,但很多goroutine的创作都不是免费的。我不认为TCP中的数据包重传的实现使用这种方法 那么,有没有一种方法可以在不创建新goroutine的情况下回调函数 我已经查看了golang nuts()的帖子,仍然无法找到解决方案。您可以创建一个计时器对象,它将提供一个定期发送消息的通道

我正在尝试在golang中实现可靠的UDP

我需要实现的一个基本特性是数据包重传

朴素的方法如下:

  • 发送数据包
  • 创建一个计时器(也将创建一个新的goroutine),以检查在计时器触发之前是否收到ACK
  • 这很简单,但很多goroutine的创作都不是免费的。我不认为TCP中的数据包重传的实现使用这种方法

    那么,有没有一种方法可以在不创建新goroutine的情况下回调函数


    我已经查看了golang nuts()的帖子,仍然无法找到解决方案。

    您可以创建一个计时器对象,它将提供一个定期发送消息的通道

    您可以创建一个计时器对象,该对象将提供一个定期发送消息的通道

    您希望创建一个包含所有计划超时的单超时。一个goroutine应该检查优先级队列的头,休眠到下一个超时,然后执行关联的代码或丢弃它

    当然,您需要处理同步问题。Java的方法是通过锁来保护优先级队列。更激进的方法是让超时处理goroutine负责接收超时,它通过专用通道接收超时


    中有一个优先级队列实现,但我没有检查它有多好。

    您想创建一个包含所有计划超时的队列。一个goroutine应该检查优先级队列的头,休眠到下一个超时,然后执行关联的代码或丢弃它

    当然,您需要处理同步问题。Java的方法是通过锁来保护优先级队列。更激进的方法是让超时处理goroutine负责接收超时,它通过专用通道接收超时

    中有一个优先级队列实现,但我还没有检查它有多好