fpm与swoole区别

发布时间 - 2019-12-02 00:00:00    点击率:

PHP-FPM

早期版本的 PHP 并没有内置的 WEB 服务器,而是提供了 SAPI(Server API)给第三方做对接。现在非常流行的 php-fpm 就是通过 FastCGI 协议来处理 PHP 与第三方 WEB 服务器之间的通信。   (推荐学习: swoole视频教程)

比如 Nginx + php-fpm 的组合,这种方式运行的 fpm 是 Master/Worker 模式,启动一个 Master 进程监听来自 Nginx 的请求,再 fork 多个 Worker 进程处理请求。每个 Worker 进程只能处理一个请求,单一进程的生命周期大体如下:

初始化模块。

初始化请求。此处请求是请求 PHP 执行代码的意思,并非 HTTP 的请求。

执行 PHP 脚本。

结束请求。

关闭模块。

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

初始化模块。

初始化请求。因为 swoole 需要通过 cli 的方式运行,所以初始化请求时,不会初始化 PHP 的全局变量,如 $_SERVER, $_POST, $_GET 等。

执行 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 连接。


# swoole  # 多个  # 句柄  # 第三方  # 回调  # 的是  # 还可以  # 一遍  # 只需要  # 只在  # 只是一个 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速配置高效服务器建站软件?  如何在建站宝盒中设置产品搜索功能?  详解阿里云nginx服务器多站点的配置  js代码实现下拉菜单【推荐】  简单实现jsp分页  Java类加载基本过程详细介绍  Laravel怎么清理缓存_Laravel optimize clear命令详解  Laravel Fortify是什么,和Jetstream有什么关系  网站建设整体流程解析,建站其实很容易!  在Oracle关闭情况下如何修改spfile的参数  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  如何快速生成橙子建站落地页链接?  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Laravel如何配置和使用缓存?(Redis代码示例)  如何利用DOS批处理实现定时关机操作详解  如何在阿里云购买域名并搭建网站?  深圳网站制作培训,深圳哪些招聘网站比较好?  JS碰撞运动实现方法详解  如何撰写建站申请书?关键要点有哪些?  详解Android——蓝牙技术 带你实现终端间数据传输  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  如何在万网主机上快速搭建网站?  如何用狗爹虚拟主机快速搭建网站?  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  SQL查询语句优化的实用方法总结  微信小程序 canvas开发实例及注意事项  Laravel如何实现本地化和多语言支持?(i18n教程)  Laravel怎么实现模型属性的自动加密  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  成都网站制作公司哪家好,四川省职工服务网是做什么用?  网站页面设计需要考虑到这些问题  百度浏览器如何管理插件 百度浏览器插件管理方法  如何安全更换建站之星模板并保留数据?  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  zabbix利用python脚本发送报警邮件的方法  微信小程序 HTTPS报错整理常见问题及解决方案  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Laravel中的withCount方法怎么高效统计关联模型数量  ,在苏州找工作,上哪个网站比较好?  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  Linux后台任务运行方法_nohup与&使用技巧【技巧】  Laravel安装步骤详细教程_Laravel环境搭建指南  Python并发异常传播_错误处理解析【教程】  简历在线制作网站免费版,如何创建个人简历?