一、fast-cgi/cgi
fast-cgi和cgi都是web服务器程序与url处理程序两者之前的应用层网络协议,现在都是用fast-cgi协议,那么现的url处理程序也都是实现了fast-cgi
二、php-fpm/php-cgi
**php-fpm**是实现**fast-cgi协议**的一个**程序**,
**php-cgi**是实现了**cgi协议**的一个**程序**
这是网上很多的理论,这两个程序就是实现对应协议的两个程序
那php-fpm和php-cgi这两个程序有什么不同点和相同点呢?
一、php-fpm和php-cgi相同点
相同点它们都是php解释器都是用来解释php源代码,处理web服务器传来的对应协议参数,然后根据对应协议输出处理结果给web服务器。
二、php-fpm和php-cgi不同点
不同点就是两者与web服务器程序通信使用的网络协议不同,php-fpm程序与web服务器程序通信用的是fast-cgi协议,php-cgi程序与web服务器程序通信用的是cgi协议。
当然不可能平白无故的使用两个协议,php-cgi程序与php-fpm程序的对web服务器程序的请求处理机制是不同的。
php-cgi程序是每次都重新加载新的程序来处理web服务器程序的请求,所以每次处理都有相同的操作,如解析php.ini文件,初始化执行环境,然后开始编译处理php源代码,再以cgi协议规定的格式返回处理结果给web服务器程序,然后退出cgi程序进程。
php-fpm程序,则不一样,php-fpm程序会先启一个master程序,解析配置文件,初始化执行环境,然后再启动多个worker程序。当web服务器程序的请求请求过来时,master程序会把请求传递给一个worker程序,由worker程序处理请求后,再以fast-cgi协议规定的格式返回处理结果给web服务器程序,返回结果后,worker程序不会被销毁,而是等下次处理,这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。
三、phpv7.2.19的php-cgi
phpv7.2.19没有php-fpm程序了,现在只有php-cgi程序了,直接由php-cgi程序实现了fast-cgi协议,与web服务器程序通迅机制跟之前的php-fpm程序一样的。
通过浏览器由http协议访问服务器,由web服务器程序通过fast-cgi协议向php-cgi程序访问,php-cgi程序输出当前运行模式给web服务器程序,最终浏览器收到的是fast-cgi运行模式。