swoole高性能原理

1、 swoole是什么?

Swoole 是 PHP 的协程高性能网络通信引擎,使用 C/C++ 语言编写,提供了多种通信协议的网络服务器和客户端模块,使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升。
  • 官方定义:面向生产环境的 PHP 异步网络通信引擎;
  • 作者愿景:重新定义PHP;
  • 网络评价:swoole颠覆了php请求之间完全隔离的运行方式。
  • 网友经历:被swoole坑哭的PHP程序员

2、安装swoole

3、衍生开源项目、用户与案例

4、swoole学习路线

二、swoole解决的问题

1、php-fpm 是如何处理web请求的?有什么问题?

  我们用的 PHP 主要用于 web 开发,通过 nginx、apache 等服务端程序调用 php-fpm 处理服务端的业务逻辑,处理完后 php 撤消内存并返回结果。一个 web 请求就要加载一次 php 的全部文件,需要的系统资源开销很大,这是目前 php-fpm 的缺点之一;并且因为 php-fpm 在一次请求结束就释放内存,无法做连接池,也不合适 service 端的开发。
  下面是 php-fpm 的运行流程,各位可以参考一下:

http://www.test.cc
        |
      Nginx
        |
路由到 http://www.test.cc/index.php
        |
加载nginx的fast-cgi模块
        |
fast-cgi监听127.0.0.1:9000地址
        |
www.test.com/index.php请求到达127.0.0.1:9000
        |
php-fpm 监听127.0.0.1:9000
        |
php-fpm 接收到请求,启用worker进程处理请求
        |
php-fpm 处理完请求并撤消内存,返回给nginx
        |
nginx 将结果通过http返回给浏览器

总结一下我理解 php-fpm 的优缺点:
优点:

  • 部署简单
  • 调试方便
  • 基于传统 php 的项目非常多,易于参考

缺点:

  • 每次 http 请求都要加载全部的项目文件
  • php-fpm 性能不佳,并发性能不好
  • 核心不支持异步IO处理,IO密集型请求响应变长
  • 对网络通信协议的支持不好,应用场景基本被限制在web领域

2、swoole是如何解决php-fpm遇到的问题的?

swoole如何避免文件的反复加载:

swoole是完全的长驻内存的,长驻内存一个最大的好处就是可以性能加速。在fpm模式下,我们处理一个请求,通常会有一些空消耗,比如框架共用文件加载,配置文件加载,那么在swoole中,可以在onworkerstart的时候提前一次性把一些必要的文件和配置加载好,不必每次receive重复加载一遍,这样能提升不小的性能。

swoole如何实现高并发:

请求到达 Main Reactor
        |
Main Reactor 根据 Reactor 的情况,将请求注册给对应的 Reactor
(每个 Reactor 都有 epoll,用来监听客户端的变化)
        |
客户端有变化时,交给 worker 来处理
        |
worker 处理完毕,通过进程间通信(比如管道、共享内存、消息队列)发给对应的 reactor
        |
reactor 将响应结果发给相应的连接
        |
请求处理完成

因为reactor基于epoll,所以每个reactor可以处理很多个连接请求。 如此,swoole就轻松的处理了高并发。

swoole如何实现异步I/O

swoole的worker进程有2种类型:一种是普通的worker进程,一种是task worker进程。
worker进程是用来处理普通的耗时不是太长的请求;task worker进程用来处理耗时较长的请求,比如数据库的I/O操作。
我们以异步Mysql举例:

耗时较长的Mysql查询进入worker
            |
worker通过管道将这个请求交给taskworker来处理
            |
worker再去处理其他请求
            |
task worker处理完毕后,处理结果通过管道返回给worker
            |
worker 将结果返回给reactor
            |
reactor将结果返回给请求方

如此,通过worker、task worker结合的方式,我们就实现了异步I/O。

swoole对网络通信协议的支持情况:

swoole 提供了多种通信协议的网络服务器和客户端模块,使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。

总结一下 swoole 的技术特点:

  • 常驻内存,避免重复加载带来的性能损耗,提升海量性能;
  • 基于epoll,轻松支持高并发;
  • 协程异步I/O,提高对I/O密集型场景并发处理能力;
  • 支持多种通信协议,方便地开发 Http、WebSocket、TCP、UDP 等应用。

3、swoole与php-fpm对比有哪些优缺点?

swoole 相对于 php-fpm 优点:

  • 常驻内存的 cli 运行模式,不用每次请求加载一次项目代码
  • 大大提高了对连接请求的并发能力
  • 协程异步I/O,提高对I/O密集型场景并发处理能力
  • 支持多种通信协议,能搭建 TCP/UDP/UnixSocket 服务器
  • 原生支持毫秒定时器

swoole 相对于 php-fpm 缺点:

  • 相关文档较少
  • 不支持 xdebug,不支持手动 dump,不熟悉相关工具的话,不太方便调试
  • 入门难度高,多数 phper 不了解 TCP/IP 网络协议、多进程 / 多线程、异步 io 等

三、swoole进程结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值