gpt4 book ai didi

c++ - 如何高效地实现大量定时器?

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:08 24 4
gpt4 key购买 nike

我正在用 C++ 编写一个程序,它可能有数十万个对象,每个对象都有一个到期时间,也就是说,如果它们在一定时间内处于非事件状态,则应该被删除。许多对象变得非常频繁,并且新对象的创建也非常迅速。

我一直在犹豫要使用什么方法。我一直在阅读有关 Asio 计时器的文章,但我不太确定它们是否能很好地满足我的需求,如果能,又如何。我有两种方法:

  1. 我可以为每个对象制作一个截止时间计时器,并在对象执行某些操作时重置它。这意味着我将拥有数十万个计时器。

  2. 我可以制作多个计时器队列,例如,30 个计时器,30 秒到期时间。第一个计时器用于剩余 30 秒生命周期的对象。如果它们在一秒钟内处于非事件状态,它们将被移动到对象的计时器队列中,以寻找剩余 29 秒生命周期的对象,依此类推。如果不活动一秒钟,最后一个队列中的对象将被删除。任何变为事件状态的对象都会返回到第一个队列。

第二种方法听起来效率更高,但真的如此吗?如果 Asio 可以有效地处理大量计时器,那么第二种方法可能会浪费我很多精力。我应该怎么做?或者有更好的方法吗?

编辑:我想我必须补充一点,我所说的效率是指更好的 CPU 利用率。内存使用是这里的次要问题。

最佳答案

我会创建一个队列,根据剩余的过期时间对对象进行排序。如果期望过期时间很频繁,我会使用链表,否则使用数组,因为在列表中查找内容会更快(但是如果您在对象本身而不是节点中保留对下一个和上一个对象的引用,它不会没关系)。

  • 现在您只需要为具有最短过期时间的对象设置一个计时器。
  • 当这个计时器用完时,删除队列开头的对象并为下一个计时器准备计时器。

关于c++ - 如何高效地实现大量定时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23988664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com