php为什么不支持定时器?
做web开发的PHP程序员对JavaScript中的两个定时器函数应该都还熟悉,回到PHP层面就有点傻眼:
PHP中有sleep,但是没有(内置)定时器函数可用。sleep函数勉强可以做到,但会导致进程阻塞,期间不能做其他事(或无响应)。为什么PHP没能提供定时器(Timer)这个功能呢?
原因
个人认为,web开发中PHP不能使用定时器的本质原因是可控 常驻内存运行环境的缺失。两个要点:第一常驻内存,第二可控。CGI模式下,进程执行完脚本后直接退出,不能指望其到指定时间运行任务;PHP-FPM模式下,进程(绝大多数)常驻内存,但不可控。
不可控的意思是执行PHP的进程不受PHP代码影响,进程的入口点和退出时机由额外的程序控制。例如FPM模式下,PHP脚本中的exit、die函数只中断脚本的执行,不会对执行脚本的进程产生特别的影响(内存泄露除外)。PHP开发人员编写的脚本是进程的执行体,执行完毕后就从进程的执行上下文中卸载出去。这种情况下,执行PHP脚本的时机仍然由外部驱动,没有外部请求PHP代码就安详的躺在硬盘上,什么都不做,也就定时任务。
由于PHP主要面向web开发,PHP这种执行模式稳定可靠,开发效率快。比如省去资源释放这一步,就避免了开发中很多工作量和坑。想想某些第三方库代码中改时区、字符编码等还不还原,在常驻内存运行环境下几乎肯定会导致后续请求有问题。但在FPM模式下,这种坑无意中直接趟平,省去许多调试时间,为程序员保住发际线做出了不小的贡献。
以上就是php为什么不支持定时器?的详细内容,更多请关注其它相关文章!
上一篇: eclipse导入后怎么运行
下一篇: 【java教程】Java 日期时间
推荐阅读
-
为什么PHP开发的软件比JAVA要便宜那么多?存在即合理
-
php composer为什么安装软件的时候就不动了
-
为什么无法使用php中mysqli的准备语句进行数据库中数据的查询(绑定参数或者绑定结果),项目急用!该如何处理
-
php中的fread和fgetc获取文件内容的单位是字节还是字符,为什么fgetc读取不到字符?
-
为什么小弟我的COOKIE这样无法使用?还有PHP一定要以这种方式编写的吗
-
如何解决“您的服务器不支持php zip”问题
-
HDMI 1.4标准为什么不支持2560*1440分辨率显示器
-
如何使用纯PHP实现定时器任务(Timer)
-
php为什么需要异步编程?php异步编程的详解(附示例)
-
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc