读书可以培养一个完人,谈话可以训练一个敏捷的人,而写作则可造就一个准确的人。 -- 培根
在以往的编程生涯中,我接触最多的就是PHP,这个被动执行的脚步语言,今天出了一个需求,定时发邮件,一下懵逼,没有请求,到点定时发送.....后来,决定用PHP写个守护进程,守护进程的核心在于“死循环”,没错~死循环.....
这里给出一个最初的代码雏形。
while (1){
........
sleep(N);
........
}
我们核心要做的就是找到N,这个就是一个调度器吧,合理的安排N让程序在指定时间点的时候被唤醒,继续执行就可以。
值得注意的是,要想做好这个事情,不得不说的两个场景:(假设我们最小循环周期为1分钟)
- 12:00有个定时任务,12:01也有个定时任务,但是12:00的这个任务执行的非常慢,一直运行到12:02才结束,这样我们如何继续运行12:01的任务。
- 12:00有个定时任务,运行非常快1/1000秒就执行结束了,但是我们的sleep函数最小单位就是秒(为什么不用usleep,那假设如果这个任务只要1/100000秒就可以执行完,咋办?)所以,一秒内就会执行1000次这个任务,我们如何避免呢?
程序大同小异,知其渔,融会贯通就好
本文由 陌上花开 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Jul 1, 2016 at 06:52 am