PHP中如何设置和使用高效的长效定时器实现周期性任务?

2026-04-06 16:330阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1642个文字,预计阅读时间需要7分钟。

PHP中如何设置和使用高效的长效定时器实现周期性任务?

PHP定时器那些事常见的定时器有两种:一种周期性执行,例如每天的凌晨三点执行报表;另一种在指定时间后执行一次,例如员工登录系统五分钟后发放每日登录奖励。

常见的定时器有两种:一种周期性定时执行,例如每天的凌晨三点出报表;另一种在指定时间后执行(一次),例如会员登录系统五分钟后发放每日登录奖励。两种情况对应shell中的cronat命令,与JavaScript中的setIntervalsetTimeout函数类似(严格来说setInterval是周期性执行,指定时间点执行需要自行处理)。

做web开发的PHP程序员对JavaScript中的两个定时器函数应该都还熟悉,回到PHP层面就有点傻眼:PHP中有sleep,但是没有(内置)定时器函数可用。sleep函数勉强可以做到,但会导致进程阻塞,期间不能做其他事(或无响应)。为什么PHP没能提供定时器(Timer)这个功能呢?

原因

个人认为,web开发中PHP不能使用定时器的本质原因是可控 常驻内存运行环境的缺失。两个要点:第一常驻内存,第二可控。CGI模式下,进程执行完脚本后直接退出,不能指望其到指定时间运行任务;PHP-FPM模式下,进程(绝大多数)常驻内存,但不可控。

阅读全文

本文共计1642个文字,预计阅读时间需要7分钟。

PHP中如何设置和使用高效的长效定时器实现周期性任务?

PHP定时器那些事常见的定时器有两种:一种周期性执行,例如每天的凌晨三点执行报表;另一种在指定时间后执行一次,例如员工登录系统五分钟后发放每日登录奖励。

常见的定时器有两种:一种周期性定时执行,例如每天的凌晨三点出报表;另一种在指定时间后执行(一次),例如会员登录系统五分钟后发放每日登录奖励。两种情况对应shell中的cronat命令,与JavaScript中的setIntervalsetTimeout函数类似(严格来说setInterval是周期性执行,指定时间点执行需要自行处理)。

做web开发的PHP程序员对JavaScript中的两个定时器函数应该都还熟悉,回到PHP层面就有点傻眼:PHP中有sleep,但是没有(内置)定时器函数可用。sleep函数勉强可以做到,但会导致进程阻塞,期间不能做其他事(或无响应)。为什么PHP没能提供定时器(Timer)这个功能呢?

原因

个人认为,web开发中PHP不能使用定时器的本质原因是可控 常驻内存运行环境的缺失。两个要点:第一常驻内存,第二可控。CGI模式下,进程执行完脚本后直接退出,不能指望其到指定时间运行任务;PHP-FPM模式下,进程(绝大多数)常驻内存,但不可控。

阅读全文