首页 > 解决方案 > 如果一个函数在一秒钟内被调用超过一百万次,打印一个错误

问题描述

如果一个类中有一个函数在一秒钟内被调用超过一百万次,我们需要打印一个错误。这基本上是我们应该使用哪种方法的设计问题。

我正在考虑使用时间计数器和计数变量。只要计数变量的值超过一百万或每秒之后,时间计数器就会重置计数变量。

标签: algorithmdata-structures

解决方案


如果你在 0.1 秒内接到 900K 呼叫,然后计数器被计时器重置,然后在 0.1 秒内又接到 900K 呼叫,那么你将在一秒钟内接到 180 万次呼叫,但你将无法打印错误。

我会做这样的事情:

  • 每 100K 调用,读取时钟并将时间存储在循环缓冲区中
  • 在缓冲区中保留 10 次,因此在至少 1M 次调用之后,无论何时添加新时间,它都会替换之前 1M 次调用中的一个。如果这些时间之间的差异小于 1 秒,那么您应该打印一个错误。

在最坏的情况下,您仍然可以在一秒钟内收到多达 110 万次调用而不会引发错误,但它可能已经足够接近了。如果您需要更高的精度,您可以使用更多的缓冲槽和更小的批次。


推荐阅读