如果某个函数在一秒钟内被调用超过百万次,则输出错误

时间:2019-05-27 21:07:30

标签: algorithm data-structures

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

我正在考虑使用一个计时器和一个计数变量。每当计数变量的值超过一百万或每秒时,计时器就会重置该计数变量。

2 个答案:

答案 0 :(得分:3)

如果您在0.1秒内收到90万次呼叫,然后计数器被计时器重置,然后在0.1秒内又获得90万次呼叫,那么您将在一秒钟内收到180万次呼叫,但是您将无法打印错误。

我会做这样的事情:

  • 每10万次通话,读取时钟并将时间存储在循环缓冲区中
  • 在缓冲区中保留10次,因此在调用至少1M之后,然后每添加一个新时间,它将替换之前1M调用中的一个。如果这两个时间之间的差小于1秒,则应该打印错误。

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

答案 1 :(得分:0)

  1. 我认为我们可以使用一个全局变量'count'来维持被调用函数的频率,该函数可以在该函数本身内部进行更新。
  2. 在开枪之前,我们还需要有一个全局变量'start_time',最初在第一次调用函数时,我们必须将其设置为当前系统时间。
  3. 因此,如果计数达到一百万,则获取当前系统时间的时间戳,并使用“ start_time”检查差异,如果差异小于1秒,则显示错误,否则不执行任何操作
  4. 在这两种情况下,我们现在都将“ count”和“ start_time”重置为当前系统时间和1