php这个名称实际上有两层含义
广义的php 是指用后缀名为.php的脚本,便是程序员编写的php代码:狭义的php 是指php支配程序,比如说 lnmp,这个php 便是 php-fpmphp-fpm是什么直接定义:
php-fpm是一个内置php解析器,采取prefork+异步IO 模型的高性能做事器程序

php-fpm从php5.3.3开始已经进入到php源代码包,之前是作为patch存在的
很少人会去读php本身源代码,我6年前办理php内存透露问题的时候做了些研究,最近再查看了一番,创造php的开拓者很有诚意,这是一款非常出色的做事器软件,支持如下
php-fpm 采取 prefork的办法 (listen同一个地址,然后fork出多少子进程)在子进程里面,采取异步IO处理客户端要求event模型可以在php-fpm.conf中配置; Specify the event mechanism FPM will use. The following is available:; - select (any POSIX os); - poll (any POSIX os); - epoll (linux >= 2.5.44); - kqueue (FreeBSD >= 4.1, OpenBSD >= 2.9, NetBSD >= 2.0); - /dev/poll (Solaris >= 7); - port (Solaris >= 10); Default Value: not set (auto detection);events.mechanism = epoll
在linux做事器上,如果不设置events.mechanism,那么默认便是采取epoll,以是
php-fpm的IO模型&并发处理能力和nginx是完备同等
nginx以性能卓越有名,大部分程序员都认为php效率低下,看了源代码,才知道这是传奇啊
在高性能支配的时候,大家每每会针对性的优化nginx 。我自己之前支配php程序也犯了缺点,8G内存的server,php-fpm的max children都会设置128+,现在看来太多了,参考nginx的支配:
nginx的worker_process一样平常设置为 2 cpu-core
php-fpm配置为 3倍 cpu core number就可以了
php-fpm稳定性比nginx稍差 这是由于php-fpm内置了一个php解析器,php-fpm进程就和php程序捆绑了,如果php脚本写得不好,有去世循环或者壅塞在某个远端资源上,会拖累加载它的php-fpm进程
而nginx和后端运用做事器之间通过网络连接,可以设置timeout,不随意马虎堵去世的
php-fpm的fastcgi是短连接 我原以为是长连接的,看了代码才知道也是短连接,处理一个request就关闭掉
php-fpm接口采取fastcgi 非常遗憾,php-fpm和fastcgi完备绑定了,无法独立利用 。只能支配在支持http-fcgi协议转换程序背后(nginx)。实在可以考虑在php-fpm代码包里面引入http协议支持,这样php-fpm可以独立运行,让nodejs无话可说
php-fpm等同于OpenResty OpenResty是一个国人开拓的nginx模块,便是在nginx引入lua阐明器. 实际上,它和php-fpm的唯一差别便是一个采取php语法,一个用lua,以是OpenResty要作为nginx增强包利用还可以,要选择它作为一个紧张编程工具,没有任何必要
从架构上来说,php-fpm已经做到最好,超过大多数 python支配工具,我再也不黑它了