循环遍历不断变化的事件列表



我有一个根据它们的响应时间ping的机器列表。最初,每个t毫秒对所有机器进行5次ping。根据每台机器上这5个ping的响应时间,我调整ping的时间以拉伸或收缩它,直到达到如下配置:

machine1: t1....t2....t3....t4....t5
machine2: t1......t2......t3......t4......t5
..
machineN: ..t1..t2..t3..t4..t5
            ^
            |machine needs to be pinged at this tick

t1..tN表示时钟的滴答(毫秒)。

每台机器有一个线程来执行ping是显而易见的,但由于机器的数量,这不是最优解决方案。

更确切地说,一个线程通过事件的全局顺序迭代是可取的,像这样:

while(true){
  fetch_next_machine_to_be_pinged();
  ping_it();
  if(any_machine_pinged_5_times());
     reorder_events(); //adjust the time of its next 5 ping
  //continue
}

实现这一目标的最佳方法是什么?(ps:语言C).

我会使用优先级队列。

在任何时候,队列将每台机器包含一个条目。条目M的"优先级"将是下一次需要ping ping机器M的时间戳,有效负载将是标识机器的某种令牌(以便您知道要ping谁)。

最新更新