Closed leakey0626 closed 1 year ago
这个其实不需要台纠结,jraft 两者都提供了, jraft 里面 timer 是一个 interface,你提到的两种实现都有,hashedwheel 主要好处就是时间复杂度O(1),而基于二叉堆优先级队列的 scheduler 时间复杂度是 O(log N)。 大量小任务适合 hasedwheer 倒是没问题,但也不代表它不适合少量任务,另外你提到的 心跳、选举 等任务应该是少数“几类”任务,其实量可能不小
关于”精度“,你也可以看到 jraft 里面都是毫秒配置,基本上毫秒级精度足够了,这一点上 hashedwheer 应该没什么劣势。
这个其实不需要台纠结,jraft 两者都提供了, jraft 里面 timer 是一个 interface,你提到的两种实现都有,hashedwheel 主要好处就是时间复杂度O(1),而基于二叉堆优先级队列的 scheduler 时间复杂度是 O(log N)。 大量小任务适合 hasedwheer 倒是没问题,但也不代表它不适合少量任务,另外你提到的 心跳、选举 等任务应该是少数“几类”任务,其实量可能不小
关于”精度“,你也可以看到 jraft 里面都是毫秒配置,基本上毫秒级精度足够了,这一点上 hashedwheer 应该没什么劣势。
十分感谢您的解答。有个地方还不是很理解,为什么说这几类任务“量可能不小”,意思是一个进程可能会运行多个raft实例吗?如果一个进程对应一个实例的话,像心跳这个任务应该只有一个?不知道我的理解对不对
一个进程内是会有多个 raft group 的,也就是 multi raft,不过确实也不够海量
好的,这块知识我还比较欠缺,等我学习完multi raft应该就能理解了,再次感谢
您好!我在研究代码架构的时候发现 jraft 是通过时间轮实现任务定时的。据我了解时间轮比较适合大量定时任务调度的场景,在 raft 场景下似乎只有心跳、选举、下台等少数几个任务,利用定时线程池是否也能满足性能要求、并且能带来更高的精度?期待您的答复~