PHP-FPM及其三种运行方式

本文详细介绍了PHP-FPM及其与FastCGI的关系,解析了fpm的master和worker进程的工作流程,重点阐述了PHP-FPM的静态、按需分配和动态三种运行模式的工作原理和特点,帮助读者理解如何根据业务需求选择合适的运行模式。
摘要由CSDN通过智能技术生成

php-fpm和FastCGI是什么?

  1. PHP-FPM(FastCGI Process Manager)是一个PHPFastCGI进程管理器,从其英文名称和定义可以看出,FPM的核心功能就是进程管理。

  2. FastCGI可以理解为一种协议,用于web服务器(nginx、Apache)和处理程序间进行通信,是一种应用层通信协议。

  3. 工作原理大致如下图
    fastcgi原理图

fpm的基本实现

  1. 简单来说,fpm的实现就是创建一个master进程,在master进程中创建worker pool并监听socket,然后fork出多个子进程(work),这些worker在启动后阻塞在fcgi_accept_request()上,各自accept请求,有请求到达后worker开始读取请求数据,读取完成后开始处理然后再返回,在这期间是不会接收其它请求的,也就是说fpm的子进程同时只能响应一个请求,只有把这个请求处理完成后才会accept下一个请求。
  2. fpm的master进程与worker进程之间不会直接进行通信,master通过共享内存获取worker进程的信息,比如worker进程当前状态、已处理请求数等,当master进程要杀掉一个worker进程时则通过发送信号的方式通知worker进程。
  3. fpm可以同时监听多个端口,每个端口对应一个worker pool,而每个pool下对应多个worker进程,类似nginx中server概念, 在php-fpm.conf中可以配置多个,例如:
    [web1]
    listen:127.0.0.1:9000
    [web2]
    listen:127.0.0.1:9001
  4. 大致原理如下图
    php-fpm结构原理图
  5. php-fpm源码结构
struct fpm_worker_pool_s {
    struct fpm_worker_pool_s *next; //指向下一个worker pool
    struct fpm_worker_pool_config_s *config; //conf配置:pm、max_children、start_servers...
     ...
    struct fpm_child_s *children; //当前pool的worker链表
    int running_children; //已启动的进程数
    int idle_spawn_rate;//空闲率
    int warn_max_children;//最大work值
    struct fpm_scoreboard_s *scoreboard; //记录worker的运行信息,比
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值