cgi、fastcgi、php-fpm、mod_php

cgi

  • cgi是公共网关接口,用户通过浏览器来访问执行再服务器上的动态程序,CGI是Web 服务器与CGI程序间传输数据的标准。准确来说是一种协议,单进程模式,启动一个CGI进程(php-cgi)这个进程会先加载php.ini的配置,通过配置 处理详情工作,例如加载配置中的PHP扩展等,最后动态解析PHP程序,处理完请求直接关闭了。每次请求经历整个生命周期。

fastcgi

  • fastcgi是快速通用网关接口,是CGI的优化升级。
  • FastCGI 致力于减少Web服务器与CGI程序之间进行互动的开销,从而使Web服务器可以同时处理更多的Web请求。与 CGI 为每个Web请求创建一个新的进程不同, FastCGI 使用持续的进程来处理一连串的Web请求,这些进程由FastCGI进程管理器管理,而不是Web服务器。
  • 由于 FastCGI 程序并不需要不断产生新进程,因此使用 FastCGI 可以大大降低Web服务器的压力并产生较高的应用效率。
  • CGI 就是所谓的短生存期应用程序,而 FastCGI 就是所谓的长生存期应用程序, FastCGI 像是一个常驻(long-live)型的 CGI , FastCGI 可以一直执行着,而不会每次花费时间去fork(这也是 CGI 最为人诟病的 fork-and-execute 模式)。

php-fpm

  • fpm是PHP FastCgi运行模式的一个进程管理器,FastCgi是Web服务器(Nginx、Apache)和处理程序之间的一种通信协议。
  • PHP没有实现Http网络库,而是实现了FastCgi协议,通过与web服务器配合实现http的处理,web服务器处理http请求,将解析的结果通过fastcgi协议转发给PHP程序,PHP程序处理完将结果返回给web服务器,完成请求返回给客户端。
  • fpm是一种多进程模型,它由一个master和多个worker进程组成。master进程启动时创建一个socket,但不会接收、处理请求,而是fork出多个worker子进程完成请求的接收及处理。
  • worker请求生命周期:等待请求、解析请求、请求初始化、执行脚本、关闭请求。一个worker进程只能处理一个请求,只有等一个请求处理完才能处理下一个请求。这与nginx的事件模型有很大区别,nginx的子进程通过epoll管理套接字,一个进程会同时处理多个请求,它是非阻塞的模型,只处理活跃的套接字。
  • master三种不同进程管理方式:静态模式(固定)、动态模式(动态)、按需模式(CGI)。
  • 优点:1.兼容多数Web服务器2.比mod_php占内存小3.更多的配置项,包括多版本PHP和suexec缺点1.配置复杂2.不被大家所熟知
> fastcgi与php-fpm的关系一句话解读:fastcgi只是通信应用协议,php-fpm就是实现了fastcig协议,并嵌入了一个 PHP 解释器。

mod_php

  • PHP以模块的方式运行在Apache中时,PHP解释器被“内嵌”在Apache的进程里。Apache不会调用任何外部的PHP进程,因此这种方式使Apache与PHP能更好的通信。但是,当以这种方式运行PHP的时候,哪怕Apache提供的仅仅是静态的资源(如HTML),Apache的每个子进程也都会载入 mod_php,导致了比正常情况下更多的内存开销。
  • 优点:1.易于安装和更新2.容配置缺点:1.仅能与Apache一起工作2.增加了Apache子进程内存开销3.当更改php.ini文件后,需要重启Apache
 
 

最新文章

  1. Css-深入学习之弧形切角矩形
  2. Java集合类学习笔记(Queue集合)
  3. 一起学HTML基础-CSS样式表常用样式属性
  4. Windows Phone 7 ListBox 列表项渐显加载动画学习笔记
  5. WebFormJS注册位置
  6. 安卓,通过本地应用分享到微信、facebook等
  7. shell编程笔记(基本部分)
  8. 四:Java使用google的thumbnailator工具对图片压缩水印等做处理
  9. AntiXSS的作用
  10. c# 岛2 小辅助~~~ 钓鱼 连击
  11. [Noi2014]购票
  12. [luogu2822][组合数问题]
  13. JS 函数(arguments、箭头函数、bind)
  14. Nexus Repository Manager 3(CVE-2019-7238) 远程代码执行漏洞分析和复现
  15. activeMq的helloword
  16. js中JSON.stringify用于自定义的类
  17. ios移动端禁止双指缩放功能
  18. 监听视图树 ViewTreeObserver 获取View的宽高
  19. zookeeper 系列文章
  20. 高可用数据采集平台(如何玩转3门语言php+.net+aauto)

热门文章

  1. Java:ConcurrentHashMap类小记-3(JDK8)
  2. Beta阶段第六次会议
  3. stm32知识学习的先后顺序
  4. Vue:Vue的介绍以及组件剖析
  5. 个人宽带如何开启IPv6网络访问
  6. 高并发场景下JVM调优实践之路
  7. vector之erase和迭代器
  8. 力扣 - 剑指 Offer 66. 构建乘积数组
  9. log4j日志集成
  10. Jenkins+SVN+Maven+testNG管理项目