
来个场景: 24小时后将未进行某个Action的业务,执行另外一个动作。 比如 24小时未付款的订单,取消。
你可能会说

来个定时呗 ,每隔半小时 ,扫描数据库订单表,将完成时间超过24小时的订单,取消掉。

But…
这方案有些明显的缺点啊,老哥
那如何既保证效率的同时,又保证实时性呢?

来说下核心思路
高效延时消息,包含两个重要的数据结构:
同时,启动一个timer:
Task结构中包含两个重要属性:

假设当前Current Index指向第一格,当有延时消息到达之后,例如希望3620秒之后,触发一个延时消息任务:
Set中;
Current Index每秒移动一格,当移动到下一格时,遍历这个格的Set,看看每个Task的Cycle-Num是不是0:
Set中删除
Warning : 不要直接用timer线程来执行任务总体思路就是这个样子,总结下有点
