0

0

cgi、fastcgi、php-cgi、php-fpm剖析

不言

不言

发布时间:2018-04-20 10:52:45

|

1893人浏览过

|

来源于php中文网

原创

这篇文章介绍的内容是关于cgi、fastcgi、php-cgi、php-fpm剖析,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

定义

首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者。

web server(比如说nginx)只是内容的分发者。比如,如果请求/index.html,那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。好了,如果现在请求的是/index.php,根据配置文件,nginx知道这个不是静态文件,需要去找PHP解析器来处理,那么他会把这个请求简单处理后交给PHP解析器。Nginx会传哪些数据给PHP解析器呢?url要有吧,查询字符串也得有吧,POST数据也要有,HTTP header不能少吧,好的,CGI就是规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议。仔细想想,你在PHP代码中使用的用户从哪里来的。

当web server收到/index.php这个请求后,会启动对应的CGI程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程。web server再把结果返回给浏览器。

好了,CGI是个协议,跟进程什么的没关系。那fastcgi又是什么呢?Fastcgi是用来提高CGI程序性能的。

提高性能,那么CGI程序的性能问题在哪呢?"PHP解析器会解析php.ini文件,初始化执行环境",就是这里了。标准的CGI对每个请求都会执行这些步骤(不闲累啊!启动进程很累的说!),所以处理每个时间的时间会比较长。这明显不合理嘛!那么Fastcgi是怎么做的呢?首先,Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是fastcgi的对进程的管理。

cgi

  • 通用网关接口,外部程序与web服务器之间的接口标准,是在cgi程序和web服务器之间传递信息的过程

  • 每一次请求都会生成一个cgi进程,cgi程序执行完,进程退出

  • 独立于服务器、独立编程语言

FastCgi

  • FastCgi 像是一个常驻型的Cgi,它可以一直执行这,只要激活后,不需要每次去fork一次,还支持分布式运算,即FastCgi程序可以在网站服务器以外的主机上执行并且接受来自其他网站服务器的请求

  • 可以同时处理多个请求

  • 长期占用内存

php-cgi

  • php官方自带的FastCGI 进程管理器

    立即学习PHP免费学习笔记(深入)”;

  • php.ini修改之后,必须kill掉php-cgi再启动php.ini 才生效。不可以平滑的重启

  • 内存不能动态分配

php-fpm

  • 非官方fastCgi进程管理器,后来php5.4开始,被官方收录了,编译php的时候只需要–enable-fpm 就可以开启php-fpm

  • 可以平滑重启php

  • 动态调度进程


Nginx只负责反向代理/请求转发,不负责管理php-cgi进程,所以Nginx一般配合能够自行管理工作进程(子进程)的php-fpm使用.
需要注意的是,php-fpm是一个独立的SAPI,其管理的不是php-cgi,也就是说php-fpm跟php-cgi无关,php-fpm内置php解释器,php-fpm的子进程是自己fork出来的,并不会调用php-cgi,你把系统中的php-cgi删了也不会影响到php-fpm服务的正常运行.

php-fpm在pm = static配置下工作进程常驻后台,也就是如果你配置了5个工作进程pm.max_children = 5,那php-fpm服务启动时就会自动fork出5个子进程并常驻后台,不会在请求处理结束后退出,也不会在空闲时退出.如果你在php脚本中使用了数据库持久连接,这时这5个工作进程还会建立并维持5个到数据库的持久连接,实现在处理多个请求的时候重用数据库连接资源,避免每个请求都建立/释放一次数据库连接.持久连接还能做到超时自动重连,对php-fpm里的脚本来说是完全透明的,脚本只需在启动时指明使用持久连接即可.

椒图AI
椒图AI

中文AI修图神器,一句话搞定复杂修图

下载

php-fpm在pm = dynamic配置下工作进程【部分】常驻后台,也就是维持一定数量的常驻进程,服务繁忙时fork出更多的进程,服务闲置时自动关掉一些进程,把内存资源归还给操作系统.虚拟主机提供商应该是比较喜欢这种方式的.

总而言之,PHP-FPM这种运行模式类似于Apache的prefork MPM,能静能动的多进程网络服务.

php-cgi是早期php官方出品的fastcgi管理器,不支持平滑重启,改了php.ini就要kill掉原来的php-cgi再重新启动才能生效;不支持动态worker调度,只能一开始指定要起几个worker。

php-fpm是从5.3.3才加入的fastcgi进程管理器,加入了动态调度功能,可以根据请求来访压力变化动态增减worker进程数量;支持reload指令,让worker进程在完成当前请求后重启,并应用php.ini新配置。

php54是之前是一种关系,php54之后另一种关系。

php54之前,php-fpm(第三方编译)是管理器,php-cgi是解释器

php54之后,php-fpm(官方自带),master 与 pool 模式。php-fpm 和 php-cgi 没有关系了。php-fpm又是解释器,又是管理器


参考网站https://www.zhihu.com/question/55835080

https://segmentfault.com/q/1010000000256516

相关推荐:

CGI、FastCGI和PHP-FPM关系图解

linux查看nginx、apache、php、php-fpm、mysql及配置项所在目录

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

32

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

23

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

28

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

6

2026.01.31

漫画防走失登陆入口大全
漫画防走失登陆入口大全

2026最新漫画防走失登录入口合集,汇总多个稳定可用网址,助你畅享高清无广告漫画阅读体验。阅读专题下面的文章了解更多详细内容。

9

2026.01.31

php多线程怎么实现
php多线程怎么实现

PHP本身不支持原生多线程,但可通过扩展如pthreads、Swoole或结合多进程、协程等方式实现并发处理。阅读专题下面的文章了解更多详细内容。

1

2026.01.31

php如何运行环境
php如何运行环境

本合集详细介绍PHP运行环境的搭建与配置方法,涵盖Windows、Linux及Mac系统下的安装步骤、常见问题及解决方案。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php环境变量如何设置
php环境变量如何设置

本合集详细讲解PHP环境变量的设置方法,涵盖Windows、Linux及常见服务器环境配置技巧,助你快速掌握环境变量的正确配置。阅读专题下面的文章了解更多详细内容。

0

2026.01.31

php图片如何上传
php图片如何上传

本合集涵盖PHP图片上传的核心方法、安全处理及常见问题解决方案,适合初学者与进阶开发者。阅读专题下面的文章了解更多详细内容。

2

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.4万人学习

PHP课程
PHP课程

共137课时 | 10.5万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号