PHP 运行环境


nginx + php-fpm
FastCGI是中立技术标准
php-fpm是php语言的FastCGI进程管理器
FastCGI事先启动解析php.ini载入扩展
初始化都在启动时完成
作为CGI管理服务器
进程/线程池预先启动系列的子进程
等待处理 web服务器发过来请求
FastCGI接收到请求交给子进程处理
Web服务器通过socket长连接请求FastCGI进程管理器
FastCGI进程是一个常驻CGI 请求到达时
FastCGI进程管理器连接一个PHP-CGI解释器
接收web服务器发来的环境变量和标准输入
请求处理完成后将输出从同一连接返回给web服务器
该PHP-CGI解释器子进程
等待处理来自FastCGI进程管理器的下一个连接

nginx+swoole
Swoole异步,并行,高性能网络通信引擎 纯C语言编写
PHP语言提供异步多线程服务器
Swoole内置http/websocket服务器端/客户端
http2.0服务器端支持go-like协同编程,同步代码实现异步程序
用I/O多路复用异步阻塞的电抗器模型
用多线程+多线程处理器实现异步I/O反应器
每个电抗器处理大量的连接请求 易处理高并发性
nginx+swoole模式nginx作为前端访问层转发机
swoole作为应用服务器构建高度并发的web服务

apache + mod_php
mod_php运行php是作为apache模块启动
在apache启动的时候会读取php.ini配置文件并加载扩展模块
apache 运行期间是不会再去读取和加载扩展模块的
Apache出于稳定性和安全性考虑
默认prefork模式运行php程序
prefork模式下一个单独的控制进程负责产生子进程
这些子进程用于监听请求并作出应答
Apache保持备用或空闲的子进程 迎接即将到来的请求
客户端无需在得到服务前等候子进程的产生
但连接数多了apache要生成更多的进程来响应请求
CPU进程的切换很频繁耗事件和资源导致apache性能下降
apache在同步阻塞I/O模型下
select遍历多个连接句柄才能知道句柄是否有事件通知
效率低