我有一个根据它们的响应时间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谁)。