PHP生命周期

PHP生命周期

PHP生命周期主要分为五大阶段

  • 模块初始化
  • 请求初始化
  • 执行
  • 请求关闭
  • 模块关闭

具体流程详情如下

模块初始化 php_module_startup

IMG_3974.JPG

在这个阶段 PHP 首先检查 php.ini 文件中定义的扩展模块并对其进行初始化和加载工作
mysql、mbstring、json等等我们需要的功能扩展模块都会在这个阶段完成

请求初始化 php_request_startup

IMG_3975.JPG

初始化本次脚本请求所需要的变量以及变量值内容符号表
我们熟知的 $_SESSION,$_COOKIE,$GLOBAL,$_GET,$_POST 等等超全局变量
都会在这个阶段完成初始化的工作

执行 php_execute_script

IMG_3976.JPG

请求关闭 php_request_shutdown

image.jpeg

这是第二个阶段的逆操作 在这个阶段 
完成所有请求相关变量和符号表的清理工作,如
unset($_POST) 然后按顺序调用扩展模块的 RSHUTDOWN 方法
通知扩展做好关闭前的准备工作

模块关闭 php_module_shutdown

image.jpeg

这是第一个阶段的逆操作
PHP 调用每个扩展的 MSHUTDOWN 方法释放内存

PHP7有多种模式运行 e.g:

CLI / FPM / CGI / embed等等
不同模式下 PHP生命周期会有差异
后面细讲CLI / FPM的区别

SAPI

简介

SAPI 「服务器应用编程接口」
可以简单的理解为php引擎对外的一个统一接口
使得php可以和外部程序进行交互 PHP常见运行模式CLI FPM等都基于SAPI

CLI模式的生命周期

简介

CLI 「Command Line Interface 命令行接口」

示意图

IMG_3971.JPG

FPM模式的生命周期

简介

FPM「FastCGI Proccess Manager」
有效控制内存和进程
支持平滑重启PHP以及重载PHP配置

示意图

IMG_3970.JPG

CLI模式和FPM模式 生命周期的区别

FPM是常驻内存的进程

所以其模块初始化只进行一次 便进入循环 阻塞等待请求
「当没有请求时 worker进程阻塞在fcgi_accept_request 让出CPU资源」
「为了防止多进程对accept进行抢占 出现惊群情况 增加了锁机制」 模块关闭也只进行一次 在退出进程时

FPM模式的多进程管理

简介

PHP-FPM是多进程服务 一个master进程「管理」和多个worker进程「处理数据请求」

进程创建

一般情况下 会根据服务器的CPU内核数设置worker的进程数

PHP-FPM进程三种设置方式

1)static模式
始终保持一定固定数量的worker进程 数量由 pm.max_children

2)dynamic模式

启动时 创建固定数量的worker进程 即最小进程数 由 pm.start_servers 控制
最大进程数为 pm.max_children 控制 进程数在期间波动

闲置的进程数可通过 pm.min_spare_servers 和 pm.max_spare_servers 控制
当闲置进程数超过 pm.max_spare_servers 则杀掉该进程

3)ondemand模式
每个闲置进程在持续闲置超过 pm.process_idle_timeout 后被杀掉

进程管理

由worker进程发出相应的信号 master进程处理

worker进程积分策略

可获得worker进程的运行状态

FPM模式与Web Server的通信方式

通信示意图 以nginx为例

IMG_3980.JPG

两种通信方式

  • TCP Socket
  • Unix Socket

TCP Socket 和 Unix Socket通信的区别

  • Unix Socket支持同一操作系统上的两个进程或多个进程进行数据通信
  • Unix Socket的效率比TCP Socket高
  • TCP Socket可跨服务器使用 远程调用必须使用TCP Socket

FastCGI和CGI的区别

对于每一个用户 请求CGI模式
都会先创建CGI子进程 处理请求后结束子进程「fork and execute模式」 当用户请求数非常多时 创建子进程后的相应初始化工作 会大量占有系统资源
同时 有多少连接就有多少CGI子进程 导致子进程反复加载 性能不足

Thanks

  • 《PHP7底层设计与源码实现》
  • 简书 CSDN等博客文章
# PHP

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×