PHP-FPM 与 Swoole 核心运行机制的比较

加密通信
• 阅读 524

前几天看见有几篇讲 swoole 的文章,今天我也来凑个热闹。欢迎大家帮我补充、纠正。

PHP-FPM

早期版本的 PHP 并没有内置的 WEB 服务器,而是提供了 SAPI(Server API)给第三方做对接。现在非常流行的 php-fpm 就是通过 FastCGI 协议来处理 PHP 与第三方 WEB 服务器之间的通信。比如 Nginx + php-fpm 的组合,这种方式运行的 fpm 是 Master/Worker 模式,启动一个 Master 进程监听来自 Nginx 的请求,再 fork 多个 Worker 进程处理请求。每个 Worker 进程只能处理一个请求,单一进程的生命周期大体如下:

  1. 初始化模块。
  2. 初始化请求。此处请求是请求 PHP 执行代码的意思,并非 HTTP 的请求。
  3. 执行 PHP 脚本。
  4. 结束请求。
  5. 关闭模块。

对细节感兴趣的可以点这里看图

多进程模型是依赖进程数来解决并发问题,一个进程只能处理一个连接,当启动大量进程,进程调度消耗可能占 CPU 的百分之几十甚至 100%,比如 C10K 问题,多进程模型就力不从心了。

Swoole

Swoole 采用的也是 Master/Worker 模式,不同的是 Master 进程有多个 Reactor 线程,Master 只是一个事件发生器,负责监听 Socket 句柄的事件变化。Worker 以多进程的方式运行,接收来自 Reactor 线程的请求,并执行回调函数(PHP 编写的)。启动 Master 进程的流程大致是:

  1. 初始化模块。
  2. 初始化请求。因为 swoole 需要通过 cli 的方式运行,所以初始化请求时,不会初始化 PHP 的全局变量,如 $_SERVER, $_POST, $_GET 等。
  3. 执行 PHP 脚本。包括词法、语法分析,变量、函数、类的初始化等,Master 进入监听状态,并不会结束进程。

Swoole 加速的原理

  • 由 Reactor(epoll 的 IO 复用方式)负责监听 Socket 句柄的事件变化,解决高并发问题。
  • 通过内存常驻的方式节省 PHP 代码初始化的时间,在使用笨重的框架时,用 swoole 加速效果是非常明显的。

对比不同

PHP-FPM

  • Master 主进程 / Worker 多进程模式。
  • 启动 Master,通过 FastCGI 协议监听来自 Nginx 传输的请求。
  • 每个 Worker 进程只对应一个连接,用于执行完整的 PHP 代码。
  • PHP 代码执行完毕,占用的内存会全部销毁,下一次请求需要重新再进行初始化等各种繁琐的操作。
  • 只用于 HTTP Server。

Swoole

  • Master 主进程(由多个 Reactor 线程组成)/ Worker 多进程(或多线程)模式
  • 启动 Master,初始化 PHP 代码,由 Reactor 监听 Socket 句柄的事件变化。
  • Reactor 主线程负责子多线程的均衡问题,Manager 进程管理 Worker 多进程,包括 TaskWorker 的进程。
  • 每个 Worker 接受来自 Reactor 的请求,只需要执行回调函数部分的 PHP 代码。
  • 只在 Master 启动时执行一遍 PHP 初始化代码,Master 进入监听状态,并不会结束进程。
  • 不仅可以用于 HTTP Server,还可以建立 TCP 连接、WebSocket 连接。

以上主要针对核心运行机制作对比,列举的不同,暂时就想到这几点了,如果有漏掉的重点,欢迎大家帮我补充啦~


更多学习内容可以访问【对标大厂】精品PHP架构师教程目录大全,只要你能看完保证薪资上升一个台阶(持续更新)

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以点击这里获取更多学习资料详情进阶PHP月薪30k>>>架构师成长路线【视频、面试文档免费获取】

点赞
收藏
评论区
推荐文章
Easter79 Easter79
4年前
swoole1.8.0+版本异步redis安装(本实例为swoole1.8.10版本)详解
Swoole1.8.0版本增加了对异步Redis客户端的支持,基于redis官方提供的hiredis库实现。Swoole提供了\_\_call魔术方法,来映射绝大部分Redis指令(本次安装实例为swoole1.8.10版本)编译安装hiredis(swoole1.8.10版本异步redis支持必须环境条件)使用Redis客户端,需要
DevOpSec DevOpSec
5年前
nginx安全配置
安全是一个重要的问题,必须引起注意。1.nginx介绍nginx本身不能处理PHP(http://www.ttlsa.com/php/"php"),它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。nginx一般是把请求发fastcgi管理进程处理,fastcgi管理进程选择cgi子
Stella981 Stella981
4年前
GitHub:开源易用的中文离线OCR
hello,小伙伴们大家好,今天给大家推荐的开源项目是:TrWebOCR,开源易用的中文离线OCR,识别率媲美大厂,并且提供了易用的web页面及web的接口,方便人类日常工作使用或者其他程序来调用~效果展示!(https://tva1.sinaimg.cn/large/007S8ZIlly1gft41qlb3dj3137
Stella981 Stella981
4年前
PHP配置优化:php
PHPFPM是一个PHPFastCGI管理器,phpfpm.conf配置文件用于控制PHPFPM管理进程的相关参数,比如工作子进程的数量、运行权限、监听端口、慢请求等等。我们在编译安装PHP的时,在./configure的时候带–enablefpm参数即可开启PHPFPM。PHPFPM配置文件为phpfpm.conf,其语法类似p
Wesley13 Wesley13
4年前
LNMP架构中常见的502错误
1.配置错误因为nginx找不到phpfpm了,所以报错,一般是fastcgi\_pass后面的路径配置错误了,后面可以是socket或者是ip:port2.资源耗尽lnmp架构在处理php时,nginx直接调取后端的phpfpm服务,如果nginx的请求量偏高,我们又没有给phpfpm配置足够的子进程,那
Stella981 Stella981
4年前
FastCGI 协议分析与C语言实现实例
考虑让我的webserver增加对PHP的支持,这就要用到php解析器来将客户端请求的php文件解析为静态资源,再由我的webserver将其返回到客户端,phpfpm就可以来帮我们完成这个工作。可是我的webserver如何与phpfpm通信呢?接下来就是本文的主角:FastCGI。FastCGI
Wesley13 Wesley13
4年前
PHP 技能精进之 PHP
PHPFPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。那么当我们谈论PHPFPM多进程模型的时候,作为PHPer的你了解多少呢?首先,让我们一起看几个问题:①:PHPFPM启动进程的方式主要有哪几种,区别是什么?②:PHPFPM,是主进程接收请求转给子进程,还是子进程单独接收请求并处理
Stella981 Stella981
4年前
Apache使用fcgi方式与PHP结合
简介FCGI全称Fast Common Gateway Interface(快速通用网关协议),是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口(CGI)的增强版本,FastCGI致力于减少网页服务器与CGI程序之间交互的开销,从而使服务器可以同时处理更多的网页请求。早期的CGI技术使
Wesley13 Wesley13
4年前
ubuntu下Subverion的安装(全)
Apache是最流行的web服务器,通过使用mod\_dav\_svn模块,Apache可以访问版本库,并且可以使客户端使用HTTP的扩展协议WebDAV/DeltaV进行访问,因为Apache是一个非常易于扩展的web服务器,它提供了许多“易于获取的”特性,例如加密的SSL通讯,日志和与第三方工具的集成,以及内置的版本库web浏览功能。
Easter79 Easter79
4年前
Swoole2.0内置协程并发测试
Swoole2.0是一个革命性的版本,它内置了协程的支持。与Go语言协程不同,Swoole协程完全不需要开发者添加任何额外的关键词,直接以过去最传统的同步阻塞模式编写代码,底层自动进行协程调度实现异步IO。使并发编程变得非常简单。最新的版本中,内置协程已支持PHP7,同时兼具了性能和并发能力,Swoole的强大超乎想象。本文基于Github最新的Sw
dkll dkll
5个月前
2025年婚恋源码小程序开发新趋势:PHP后端+UniApp前端源码搭建用户认证、匹配、聊天系统
一、技术架构:PHPUniApp的黄金组合1.PHP后端:稳定高效的核心支撑PHP作为成熟的后端语言,在婚恋小程序开发中展现出三大优势:高并发处理能力:通过ThinkPHP6框架结合Redis缓存,可支撑万人级在线用户同时互动。例如,采用Swoole扩展