一:概述

  - FPM 定义

    -  FPM(FastCGI Process Manager)是PHP FastCGI运行模式的一个进程管理器。

   FastCGI

    -  Web服务器(如:Nginx、Apache)和处理程序之间的一种通信协议。

    -  注意:它只是一种协议!(与HTTP协议类似)

    - 具体请戳  《PHP - CGI/Fastcgi/PHP-FPM》

二:FPM 的作用

  - PHP只是一个脚本解析器,我们可以把它理解为一个普通的函数,输入是PHP脚本。输出是执行结果。

  - 假如我们想用PHP代替shell,在命令行中执行一个文件,那么就可以写一个程序来嵌入PHP解析器,这就是cli模式,这种模式下PHP就是普通的一个命令工具。

  - 接着我们又想:能不能让PHP处理http请求呢?这时就涉及到了网络处理,PHP需要接收请求、解析协议,然后处理完成返回请求。

  - 在网络应用场景下,PHP并没有像Golang那样实现http网络库,而是实现了FastCGI协议,然后与web服务器配合实现了http的处理,web服务器来处理http请求。

    - 然后将解析的结果再通过FastCGI协议转发给处理程序,处理程序处理完成后将结果返回给web服务器,web服务器再返回给用户。

  - 

三:FPM 的实现

  -  FPM 的实现就是创建一个 master 进程,在 master 进程中创建并监听socket,然后 fork 出多个子进程,这些子进程各自 accept 请求.

  - 子进程的处理非常简单,子进程启动后阻塞在accept上,有请求到达后开始读取请求数据,读取完成后开始处理然后再返回

  - 在子进程处理期间是不会接收其它请求的,也就是说fpm的子进程同时只能响应一个请求,只有把这个请求处理完成后才会accept下一个请求

  - fpm的master进程与worker进程之间不会直接进行通信,master通过共享内存获取worker进程的信息,比如worker进程当前状态、已处理请求数等

  - 当master进程要杀掉一个worker进程时则通过发送信号的方式通知worker进程。

  - 具体实现上 是 多个worker pool组成一个单链表:

四:请求处理

  -  流程就是worker进程不断accept请求,然后执行PHP脚本并返回

  -  整体流程

    -  (1)等待请求: worker进程阻塞在fcgi_accept_request()等待请求;

    -  (2)解析请求: fastcgi请求到达后被worker接收,然后开始接收并解析请求数据,直到request数据完全到达;

    -  (3)请求初始化: 执行php_request_startup(),此阶段会调用每个扩展的:PHP_RINIT_FUNCTION();

    -  (4)编译、执行: 由php_execute_script()完成PHP脚本的编译、执行;

    -  (5)关闭请求: 请求完成后执行php_request_shutdown(),此阶段会调用每个扩展的:PHP_RSHUTDOWN_FUNCTION(),然后进入步骤(1)等待下一个请求。

《FPM》

最新文章

  1. C# winform 界面美化技巧(扁平化设计)
  2. htmlentities,html_entity_decode,addslashes
  3. git merge 和 git rebase 小结
  4. C++类内存分布
  5. head标签掉到body里的问题
  6. Add LUN to ASM in Linux
  7. 内存泄漏检测工具Valgrind
  8. MallBuilder 多用户商城管理系统 v5.8.1.1
  9. 《暗黑世界GM管理后台系统》部署+功能说明
  10. 介绍4款json的java类库 及 其性能测试
  11. 洛谷-均分纸牌-NOIP2002提高组复赛
  12. Jquyer相册
  13. DevExpress ASP.NET Core Controls 2019发展蓝图(No.2)
  14. 去除input[type=number]的默认样式
  15. HTTP,RFC自学心得
  16. Etcd+Confd实现Nginx配置文件自动管理
  17. Python全栈-数据库存储引擎
  18. Maven中maven-source-plugin,maven-javadoc-plugin插件的使用
  19. WCF之通信工厂的简单使用
  20. java 工作流项目源码 SSM 框架 Activiti-master springmvc 集成web在线流程设计器

热门文章

  1. tomcat 优化建议
  2. zabbix3.2监控rabbitmq集群
  3. 51nod--1134 最长递增子序列 (动态规划)
  4. jQuery 第六章 jQuery在Ajax应用
  5. Hdu 1022 Train Problem I 栈
  6. docker安装 <一>
  7. [方案]基于Zynq WiFi方案构建
  8. Invalid tld file: "/WEB-INF/tags/xxxt.tld", see JSP 2.2 specification section 7.3.1 for more details
  9. angular 2+ 变化检测系列三(Zone.js在Angular中的应用)
  10. eclipse安装Spring的具体步骤