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

时间:2020-8-5 作者:admin

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是实现

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。