PHP面试:简述CGI、FastCGI和PHP-FPM的区别
cgi
cgi:通用网关接口(common gateway interface),是web 服务器和请求处理程序之间传输数据的一种标准或协议,只要遵循这个标准就可以用任何动态语言实现处理程序。
通常所说的cgi是指cgi程序,即实现了cgi接口标准的程序。
cgi程序的工作方式
web服务器一般只处理静态文件请求(如 jpg、htm、html),如果碰到一个动态脚本请求(如php),web服务器主进程,就fork出一个新的进程来启动cgi程序,也就是将动态脚本请求交给cgi程序来处理。启动cgi程序需要一个过程,比如,读取配置文件,加载扩展等。cgi程序启动后,就会解析动态脚本,然后将结果返回给web服务器,最后web服务器再将结果返回给客户端,刚才fork的进程也会随之关闭。
这样,每次用户请求动态脚本,web服务器都要重新fork一个新进程,去启动cgi程序,由cgi程序来处理动态脚本,处理完后进程随之关闭。
这种工作方式的效率是非常低下的。
fastcgi
fastcgi,主要行为是将cgi解释器进程保持在内存中并因此获得高效的性能。
fastcgi进程管理器需要单独启动,启动fastcgi后,会生成一个fastcgi主进程和多个子进程(子进程其实就是cgi解释器进程)。
当客户端请求web服务器上的动态脚本时,web服务器会将动态脚本通过tcp协议交给fastcgi主进程,fastcgi主进程根据情况,安排一个空闲的子进程来解析动态脚本,处理完成后将结果返回给web服务器,web服务器再将结果返回给客户端。该客户端请求处理完毕后,fastcgi子进程并不会随之关闭,而是继续等待主进程安排工作任务。
php-fpm
php-fpm,fastcgi进程管理器(fastcgi process manager),提供了更好的php进程管理方式,可以有效控制内存和进程、可以平滑重载php配置等。
推荐阅读
-
PHP面试:简述CGI、FastCGI和PHP-FPM的区别
-
php提供的sapi有哪些?CGI、FastCGI、php-fpm、php-cgi解释
-
基础概念PHP-FPM、FastCGI和CGI
-
简述c和c++的基本区别,你真的懂吗?(面试必学)
-
如何通俗地解释 CGI、FastCGI、php-fpm 之间的关系?
-
CGI和servlet运行方式本质的区别是什么?PHP和Java在Web开发的原理有哪些本质不同?
-
apache中配置php支持模块模式、cgi模式和fastcgi模式的实验
-
如何通俗地解释 CGI、FastCGI、php-fpm 之间的关系?
-
php面试题一之线程和进程的区别(顺带提下协程)
-
php和cgi之间的区别?