每180秒更新一个全局变量,而不休眠或阻塞客户端



我是一个在P2P协议中编写对等体的人。我有一个全局变量,表示我想要与之通信的对等方的映射。然而,我希望每180秒更新一次这个映射,而不会休眠或阻塞客户端,因为我仍然需要能够发送数据包并处理传入的数据包。

到目前为止,客户端的结构类似于这样:

var map[int]Peer
func main() {
for {
// Every 180 seconds, update peers map
// send packets / receive packets
}
}

有问题的部分是定时更新。我进行了搜索,很多可能的解决方案都使用time.AfterFuncSleep。但我不确定AfterFunc的行为,因为它是一个Goroutine,而且据我所知,只有全局变量的一个副本被传递给Goroutines,对吧?因此,这可能不是一个可行的解决方案,或者我误解了基本概念。

我想可能有一个我无法想出的非常简单的解决方案。我很乐意阅读一些解决这个问题的可能办法。

感谢

只有全局变量的副本被传递给Goroutines,对吗?

不,goroutine可以变异全局变量。但如果你这样做,就要格外注意数据竞赛。您可能希望添加一个互斥对象来保护全局变量的并发访问。

相关内容

  • 没有找到相关文章

最新更新