当前位置: 首页 > 后端技术 > PHP

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

时间:2023-03-29 22:46:16 PHP

PHP-FPM与Swoole核心运行机制对比欢迎大家帮我补充指正。早期版本的PHP-FPM并没有内置WEB服务器,而是提供了SAPI(ServerAPI)用于第三方对接。现在非常流行的php-fpm通过FastCGI协议处理PHP与第三方WEB服务器的通信。比如Nginx+php-fpm的组合,这样运行的fpm是Master/Worker模式,启动一个Master进程监听来自Nginx的请求,然后fork出多个Worker进程来处理请求。每个Worker进程只能处理一个请求,单个进程的生命周期大致如下:初始化模块。初始化请求。这里的请求是请求PHP执行代码,不是HTTP请求。执行PHP脚本。结束请求。关闭模块。如果您对细节感兴趣,可以点击此处查看图片。多进程模型依靠进程的数量来解决并发问题。一个进程只能处理一个连接。当大量进程启动时,进程调度消耗可能占CPU的几十甚至100%,比如C10K的问题,多进程模型将无法如愿以偿。SwooleSwoole也采用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-FPMMaster主进程/Worker多进程模式。启动Master,监听Nginx通过FastCGI协议传来的请求。每个Worker进程只对应一个连接,用于执行完整的PHP代码。PHP代码执行完毕后,占用的内存全部销毁,下次请求需要重新初始化等繁琐操作。仅适用于HTTP服务器。SwooleMaster主进程(由多个Reactor线程组成)/Worker多进程(或多线程)模式启动Master,初始化PHP代码,Reactor监听Socket句柄的事件变化。Reactor主线程负责子多线程的平衡,Manager进程管理Worker多进程,包括TaskWorker进程。每个Worker接受来自Reactor的请求,只需要执行回调函数部分的PHP代码即可。Master启动时只执行一次PHP初始化代码,Master进入监听状态,不结束进程。不仅可以用于HTTPServer,还可以建立TCP连接和WebSocket连接。以上主要是针对核心运行机制的对比。上面列出的差异暂时只是几点。如果有什么遗漏的地方,请帮我补充。更多学习内容,可以访问【BandmarkingFactory】精品PHP架构师教程目录完整,只要能看懂保证你的薪水更上一层楼(持续更新中),以上内容希望大家帮助大家。很多PHPer在进阶的时候总会遇到一些问题和瓶颈。他们写了太多的业务代码,没有方向感,不知道从哪里开始改进,整理了一些资料,包括但不限于:分布式架构,高扩展,高性能,高并发,服务器性能调优,TP6,laravel,YII2,Redis,Swoole,Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等知识点,需要进阶干货的可以免费分享给你。如果您需要,可以点击此处获取更多学习资料。详情进阶PHP月薪30k>>>架构师成长之路【免费获取视频和面试资料】