PHP-FPM及其三种运行方式

本文详细介绍了PHP-FPM(FastCGI进程管理器)的基本实现、工作流程,以及三种运行模式——静态模式、按需分配模式和动态模式。PHP-FPM作为FastCGI的进程管理器,其核心是进程管理。文章通过源码分析,解释了fpm如何创建和管理worker进程,以及三种模式下进程的分配和回收策略。动态模式在灵活性和资源利用率方面表现优秀,适用于处理请求量变化大的场景。
摘要由CSDN通过智能技术生成

PHP-FPM及其三种运行方式
php-fpm和FastCGI是什么?
fpm的基本实现
worker工作流程
fpm启动流程部分源码
php-fpm运行的三种模式
`static`模式:静态模式
`ondemand` 模式:按需分配模式
`dynamic`模式:动态模式
总结
php-fpm和FastCGI是什么?
PHP-FPM(FastCGI Process Manager)是一个PHPFastCGI进程管理器,从其英文名称和定义可以看出,FPM的核心功能就是进程管理。

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

工作原理大致如下图


fpm的基本实现
简单来说,fpm的实现就是创建一个master进程,在master进程中创建worker pool并监听socket,然后fork出多个子进程(work),这些worker在启动后阻塞在fcgi_accept_request()上,各自accept请求,有请求到达后worker开始读取请求数据,读取完成后开始处理然后再返回,在这期间是不会接收其它请求的,也就是说fpm的子进程同时只能响应一个请求,只有把这个请求处理完成后才会accept下一个请求。
fpm的master进程与worker进程之间不会直接进行通信,master通过共享内存获取worker进程的信息,比如worker进程当前状态、已处理请求数等,当master进程要杀掉一个worker进程时则通过发送信号的方式通知worker进程。
fpm可以同时监听多个端口,每个端口对应一个worker pool,而每个pool下对应多个worker进程,类似nginx中server概念, 在php-fpm.conf中可以配置多个,例如:
[web1]
listen:127.0.0.1:9000
[web2]
listen:127.0.0.1:9001
大致原理如下图

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的运行信息,比如空闲、忙碌worker数
    ...
}

1
2
3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值