老师,请教个调度计划表map的问题?

来源:8-5 实现任务调度协程(下)

y_play

2019-03-21

假如调度计划表map有10万个计划(反正会遍历超过2秒),其中有一个任务2秒周期执行,其他都是一天一个月执行的。
我的问题是,2秒就要执行,但是map遍历超过了2秒,2秒的那个任务执行就要延后了哟?那这样任务就不是定时执行了吧。不知道我思考的对不对。

写回答

1回答

小鱼儿老师

2019-03-21

同学好,假设遍历10万个任务需要2秒成立,那么你说的情况也不会出现。


检查的逻辑是先获取当前时间,保存在now变量中,然后遍历每个任务与它们的调度时间做比较,整个过程中now不会发生改变,与遍历耗时无关,任务一定可以被调度。


之所以采用遍历检查的方式是因为实现简单,如果我们做的更好应该考虑更合适的数据结构,比如:最小堆+哈希表,但鉴于实现成本高所以没有在课程中体现。

1
2
四十个大盗
最小堆,即是优先队列,key为每个任务的调度时间,value为每个任务的指针(指向哈希表的value值)。 哈希表:key为每个任务的名字,value为具体的每个任务。
2021-03-21
共2条回复

Go语言开发分布式任务调度 轻松搞定高性能Crontab

分布式系统设计+高并发细节处理,一次性让你“晋级”到位

1136 学习 · 177 问题

查看课程