cgi、fastcgi、php-cgi、php-fpm异同

1. cgi
    - 通用网关接口,就是外部应用程序(cgi程序)与web服务器之间的接口标准。
    - nginx是内容分发者,如果是请求index.php,根据配置文件内容得知不是静态文件,就会去找对应的cgi程序进行解析
    - cgi就是规定要传那些数据,以什么格式传递给后方进行处理的协议
    - cgi工作模式,一个请求发送过来,启动cgi解释器(创建进程)-> 逻辑处理 -> 退出 (fork and exec 模式) 每次都需要重新创建进程,加载配置,浪费系统资源

2. fastcgi
    - 快速通用网关接口,常驻型的cgi,不用每次都fork进程,其会使cgi解解释器进程常驻内存,所以性能较高
    - master-worker模型,服务器启动时载入fastcgi进程管理器
    - fastcgi会进行自身初始化,初始化时会创建多个进程
    - 请求到达web服务器后,fastcgi进程管理器会选择并通过socket连接到一个cgi解释器

3. php-cgi
    - php自带的cgi管理器
    - php-cgi的缺点,不能平滑重启,需要重启php-cgi才能使php.ini生效

4. php-fpm
    - php-fpm是php的一种fastcgi的实现,管理php的fastcgi进程池
    - 能够调度php-cgi程序
    - 能够实现平滑重启
    - php-fpm创建一个master进程,然后创建进程池,监听socket,fork出多个子进程,子进程各自accept请求,php-fpm的子进程同时只能响应一个请求,处理完一个请求才可以accept下一个请求,多进程,同步阻塞模型
    - master和worker进程之间不直接进行通信,master通过共享内存获取worker进程信息,master进程发送信号通知worker进程
    - php-fpm可以同时监听多个端口,每个端口对应一个worker pool
    - worker是cgi程序,php-fpm是fastcgi协议的php是实现

你可能感兴趣的:(php,cgi)