我有一个我根据响应时间ping的机器列表。
最初,所有机器都按t
毫秒进行5次。根据每台机器上这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)。
答案 0 :(得分:3)
我会使用priority queue。
任何时候,队列每台机器都会包含一个条目。条目M
的“优先级”将是下次需要ping机M
时的时间戳,并且有效负载将是识别机器的一些令牌(以便您知道要ping谁)。