http://blog.csdn.net/xsgnzb/article/details/52875331



CGI全称Common Gateway
Interface即公共网关接口,它遵循cgi规范,定义了与其他服务之间的通信协议,如nginx将请求转给php时,应该携带哪些信息,header、postdata、host等等,php在处理完程序之后返回内容的格式如何等规则。

 
     
php在使用CGI的方式启动时,在一个请求到来时,会加载php.ini文件初始化相关环境,在请求处理完之后又销毁。新请求过来时又进行一次同样的操作,消耗了服务器资源。
 
     
为了解决这个问题,所以有了FAST-CGI的出现。
 
     
FAST-CGI顾名思义是要提高CGI的效率,它主要处理CGI重复初始化的过程。先看下FAST-CGI的原理:
 
  1、Web Server 启动时加载FAST-CGI的进程管理器,如apache
module
 
 
2、FASTCGI进程管理器自身初始化,启动多个php-cgi(CGI解释器进程),并等待来自web server的链接
 
 
3、接收到请求时,FastCgi选择并链接到一个php-cgi,将CGI的环境变量和标准输入发送到FastCgi的php-cgi进程
 
  4、处理完成后,php-cgi将标准输出和错误信息返回web
server,并断开与FastCgi的连接,等待下一次请求接入。如果是CLI模式下,则php-cgi直接退出。
 
     
FastCgi的缺点:
 
 
启动多个进程,占用内存,一个php-cgi程序通常占用7-25M内存,如果在很多请求并发量下,内存消耗严重。
 
     
PHP-CGI是FastCgi的管理进器,它的不足:
 
  1、修改php.ini文件要重启php-cgi才能生效,不能平滑重启
 
  2、直接杀死php-cgi,php不能运行

 
      PHP-FPM
即PHP FastCgi Process Manager,FasgCgi的进程管理器,它相对于PHP-CGI的优点:
 
  1、平滑重载PHP配置
 
  2、内存和进程控制更有效

在./configure的时候带
–enable-fpm参数即可开启PHP-FPM。


 
     
简单的理解,CGI和FASTCGI是通信协议V1.0和V2.0,而PHP-CGI和PHP-FPM是实现了这种协议的程序。所以处理具体请求的是PHP-CGI或PHP-FPM,它们遵循fastcgi协议。

CGI,FAST-CGI,PHP-FPM的区别的更多相关文章

  1. 杂谈php之什么是cgi,fastcgi,fpm,cli,mod

    杂谈PHP极少关注的问题 本话题来自于我使用PHP进行网页爬虫的一次经历.对于一个web开发者来说,PHP解释器本身却知之甚小,实在是惭愧呐! 首先这个话题要从几个提问开始. PHP是什么? 外文名: ...

  2. Fast CGI 工作原理

    http://www.cppblog.com/woaidongmao/archive/2011/06/21/149092.html 一.FastCGI是什么? FastCGI是语言无关的.可伸缩架构的 ...

  3. 安装fast cgi

    1. 下载 在HTTPD主页,找到"mod_fcgid" 下载“mod_fcgid-2.3.9-crlf.zip” 2. 生成so文件 首先,设置APACHE2_HOME系统变量. ...

  4. 关于fast cgi和php-fpm的关系

    相关文档“https://segmentfault.com/q/1010000000256516%20” 一.什么是cgi cgi是一个协议,这个协议规定我们web服务器访问的时候,nginx和php ...

  5. CGI、FastCGI和php-fpm的区别

    参考网上的描述,将网上的描述内容,整理进来: 首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者.web server(比如说nginx)只是 ...

  6. 简述 CGI、FastCGI和php-FPM的区别

    1.CGI是联系webserver 跟php解析器的一个桥梁 2.FastCGI是CGI改良的版本 3.php-FPM 是FastCGI 的进程管理器

  7. Fast Paxos 和 Paxos的区别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt373 自从Lamport在1998年发表Paxos算法后,对Paxos的各种 ...

  8. Windows环境下使用python 3.x自带的CGI服务器测试cgi脚本--Python

    1.在桌面上新建一个文件夹作为服务器目录文件夹(文件夹名称自定义,文件夹位置自定义),在www文件下再建一个文件夹,文件夹名为“cgi-bin”,须是这个文件名,其他试过不行(原因暂时未知)

  9. windows环境下使用python3.x自带的CGI服务器测试cgi脚本(转)

    1.在桌面上新建一个文件夹作为服务器目录文件夹(文件夹名称自定义,文件夹位置自定义),在www文件下再建一个文件夹,文件夹名为“cgi-bin”,须是这个文件名,其他试过不行(原因暂时未知)

  10. CGI,FastCGI,PHP-FPM,PHP-CLI,modPHP

    This might give you a broader understanding of their difference: CGI: (common gateway interface) It ...

随机推荐

  1. 自动生成getter,setter方法的插件lombok

    1.在InteiliJ IDEA上安装lombok插件,并重启 . 2.在pom.xml文件中添加依赖 <dependency>    <groupId>org.project ...

  2. ASP.NET Core学习之二 菜鸟踩坑

    对于像我这样没接触过core的人,坑还是比较多的,一些基础配置和以前差别很大,这里做下记录 一.Startup 1.注册服务 // This method gets called by the run ...

  3. 使用performance monitor 查看 每一个cpu core的cpu time

    使用performance monitor 查看 每一个cpu core的cpu time: 打开performance monitor,添加 counter 如下 运行一段cpu bound 的代码 ...

  4. 用 HAproxy 搭建 RabbitMQ 集群

    构建参考: [ Rabbitmq cluster setup with HAproxy ] [ python demo ] RabbitMQ Cluster 遇到的问题 python pika 作为c ...

  5. Python入门-数据类型之字符串

    字符串详解 没那么多废话,直接介绍字符串使用.继续往下看~~~ 字符串定义: *1.引号包围,不可变(指的是不可以对字符串进行修改)得序列(凡是能够通过索引取值的都是序列). *2.不可变对象(字符串 ...

  6. iOS中的zxing集成步骤

    参照网上各大神文章,自己总结了下如下,欢迎大家指正与交流!(主参照:http://blog.csdn.net/brokge/article/details/9045629) 1. 到 github下载 ...

  7. Java学习笔记22(Date类、DateFormat类)

    Date,时间和日期类,这里讲util包中的而不是sql包中的 Date:表示特定的时间瞬间,精确到毫秒(1000毫秒=1秒) 时间和日期的操作都基于毫秒值 时间原点:1970年1月1日,0时0分0秒 ...

  8. 【转】Jenkins 安装与配置

    基本配置: 1.Linux安装配置jdk环境 1.1.上传到 Linux 服务器:例如: 上传至: cd /usr/local 1.2.解压: rpm -ivh jdk-8u111-linux-x64 ...

  9. PE文件详解(五)

    在前面几节中经常提到相对虚拟地址RVA,在这篇博客中主要说明这个概念.本来是想接着转载小甲鱼的,但是我自己根据这篇文章和他的视频来学习的时候,发现在RVA与文件的相对偏移地址进行转化的时候,那块我看不 ...

  10. JMeter-自动生成测试报告

    很多朋友都在问jmeter如何生成测试报告,这里随便说两句. 环境要求 1:jmeter3.0版本之后开始支持动态生成测试报表 2:jdk版本1.7以上 3:需要jmx脚本文件 基本操作 1:在你的脚 ...