好长时间没有更新了,时间都花在带娃上。以前有时间,可没有这个意识和认知;现在没有时间,偏偏觉悟又上来了。就好比以前有时间可是没有钱去旅游,现在是有点钱,可是没有时间去。唉,人生有时候就是矛盾的。
今天恰好有同事微信我关于程序延时的问题,笔者思考总结了一下。程序中到底延时怎么做呢?根据业务逻辑特点来确定延时,需要多少设置多少即可。唯一需要注意的是就是在长时间运行的业务上,应该设置个延时,如果是CPU密集型的任务需要马上执行完毕的话道可以不必做个延时,因为很快就运行完毕了。
那么现在有个情况:主循环延时一秒,那么业务场面上其实不需要这么快的时间周期,但是如果不延时大于1秒或者贴合业务周期的话,那么可能错过业务执行的时间点,比如整数分钟 。那么自己设计程序时应该怎么解决呢?
笔者有几点思考:
1、延时时间在最小循环时间和业务循环时间之间取个合适值,对于时间要求没有那么精确的话,此方法最简单,但是对于时间要求较高的话,那么这个循环时间无疑会错过业务时间点;
2、判断程序运行时间与下一个业务时间点的差值diff_time,在程序第一次运行时先延时这个差值diff_time,然后再延时业务时间周期 。这个方法就比较贴合实际运行的需求了,而且程序逻辑性还不复杂,实现起来也简单;
3、在第二个方法的基础上,如果程序长时间运行带来时间偏差怎么办?程序延时和电脑的时间可能存在一丝误差,在长时间的运行中就会累计加大差值。笔者想到就是再做个diff_check函数,每天来同步时间延时,保证程序延时后的时间点是业务时间点。此方法可以针对更高要求的场景中。
上面三个方法是基于时间的方法,有个数据流。那么其实可以根据业务逻辑的某个事件触发来完成业务逻辑,抛弃基于时间延时的思想。
基于数据流还是事件触发,就看读者自己的业务需求了!
网友评论