[精选] swoole原来是这样处理并发与异步I/O的

2021年7月28日 284点热度 0人点赞 0条评论

最新版激活:phpStorm2021版注册码

学习与交流:php技术交流微信群
商务合作加微信:2230304070
图片

图片


文章正文

Swoole底层内置了异步非阻塞、多线程的网络IO服务器。PHP程序员仅需处理事件回调即可,无需关心底层。与Nginx/Tornado/Node.js等全异步的框架不同,Swoole既支持全异步,也支持同步。


而它又是如何处理高并发的呢?

①对Reactor模型介绍

我们都知道IO复用异步非阻塞程序使用的是经典的Reactor模型,Reactor就是反应堆的意思,也就是说它本身不处理任何数据收发。只是可以监视一个socket(比如管道、eventfd、信号)句柄的事件变化。


Reactor只作为一个事件发生器,实际对socket句柄的操作,如connect/accept、send/recv、close等都是在callback中完成的。看看下面图片就可以了解到。

图片

②swoole的架构

咱们再来看看swoole的架构,我们也可以从以下借鉴的图片可以看出,swoole采用的架构模式:多线程Reactor+多进程Worker,因为reactor是基于epoll的,所以不难看出每个reactor,它可以用来处理无数个连接请求。如此,swoole就轻松的实现了高并发的处理。

图片

Swoole的处理连接流程图如下:

图片

当请求到达时,Swoole是这样处理的:

图片

Swoole 如何实现异步I/O

基于上面的Swoole结构图,我们可以知道:Swoole的worker进程有2种类型:一种是普通的worker进程,一种是task worker进程。这两种类型分别用来处理什么呢?

  • worker进程:用来处理普通的耗时不是太长的请求

  • task worker进程:用来处理耗时较长的请求,比如数据库的I/O操作

我们再以异步MySQL举例,不难看出通过worker、task worker结合的方式,我们就实现了异步I/O。

图片

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

文章参考:https://blog.csdn.net/weixin_39862697/article/details/111331218

以上是本文的全部内容,希望对你的学习有帮助,以下是一些免费课程的整理与分享,长按二维码,获取你想要的课程。

让学习成为一种习惯

获取实战教程

图片

经验  |  方法  |  面试  |  文章 

35080[精选] swoole原来是这样处理并发与异步I/O的

这个人很懒,什么都没留下

文章评论