【原】PHP定时任务
in 备忘 with 0 comment

【原】PHP定时任务

in 备忘 with 0 comment

读书可以培养一个完人,谈话可以训练一个敏捷的人,而写作则可造就一个准确的人。 -- 培根

在以往的编程生涯中,我接触最多的就是PHP,这个被动执行的脚步语言,今天出了一个需求,定时发邮件,一下懵逼,没有请求,到点定时发送.....后来,决定用PHP写个守护进程,守护进程的核心在于“死循环”,没错~死循环.....

这里给出一个最初的代码雏形。

while (1){
     ........

     sleep(N);

     ........

}

我们核心要做的就是找到N,这个就是一个调度器吧,合理的安排N让程序在指定时间点的时候被唤醒,继续执行就可以。

值得注意的是,要想做好这个事情,不得不说的两个场景:(假设我们最小循环周期为1分钟)

  1. 12:00有个定时任务,12:01也有个定时任务,但是12:00的这个任务执行的非常慢,一直运行到12:02才结束,这样我们如何继续运行12:01的任务。
  2. 12:00有个定时任务,运行非常快1/1000秒就执行结束了,但是我们的sleep函数最小单位就是秒(为什么不用usleep,那假设如果这个任务只要1/100000秒就可以执行完,咋办?)所以,一秒内就会执行1000次这个任务,我们如何避免呢?

程序大同小异,知其渔,融会贯通就好

Comments are closed.