Swoole进程模型分析

原创
09/21 17:38
阅读数 165

在这边文章中我们将介绍以下内容:

1、Swoole Server的运行模式

2、Swoole进程模型分析

swoole进程

上图是Swoole官网提供的各个进程相互关系图,可以说理解了这张图,你就理解了Swoole的进程模型。

1、Swoole Server的运行模式

Swoole服务常见的运行模式有单线程模式进程模式两种,两种方式介绍如下:

单线程模式(SWOOLE_BASE)这种模式就是传统的异步非阻塞Server,与Nginx和Node.js等异步服务的原理是一样的。在这种模式下,事件循环会直接回调PHP的函数,而不是通过线程dispatch投递任务。如果在回调函数中有阻塞操作,就会导致Server退化为同步模式。就像在上一篇文章中Nginx+PHP-FPM架构中介绍的那样,Nginx只做转发,具体业务由PHP-FPM来实现。假如Nginx也可以处理业务逻辑,一旦出现阻塞的业务逻辑,Nginx的性能会急剧下降。正是因为Nginx和PHP-FPM所起到的作用不同,才会造就Nginx的高性能。Base模式的特点:没有Master进程的角色;每个Worker进程同时承担了Process模式下Reactor线程和Worker进程两部分职责;在这种模式下,Manage进程是可选的,当设置了worker_num=1,并且么有使用Task和MaxRequest特性时,底层将直接创建一个单独的Worker进程,不创建Manager进程Base模式的优点:没有IPC开销,性能更好;代码简单,不容易出错。Base模式的缺点:TCP连接时在Worker进程中维持的,所以当某个Worker进程挂掉时,此Worker内的所有连接都将被关闭;少量TCP长连接无法利用到所有的Worker进程;TCP连接与Worker进程是绑定的,在长连接应用中,不同的Worker进程无法实现负载均衡。例如:某些连接的数据量很大,这些连接所在的Worker进程的负载会非常高。但是某些连接数据量很小,所在Worker进程的负载会非常低。Base模式适用场景:如果客户端连接之间不需要交互,可以使用Base模式。如Memcache、Http服务等。

进程模式(SWOOLE_PROCESS)多进程模式比较底层实现比较复杂,用了大量进程间通信、进程管理机制。适合业务逻辑非常复杂的场景。Swoole提供了完善的进程管理、内存保护机制。在业务逻辑非常复杂的情况下,也可以长期稳定运行。

2、Swoole进程模型

从上图中可以看出,Swoole在启动后会创建Master进程和Manager进程。Master进程会创建Master线程、Reactor线程、心跳检测线程等,Manager进程会创建Worker进程和Task进程。

Swoole的线程和进程之间分别有什么作用呢?

Master进程这个进程是swoole的核心进程,也是一个多线程的进程,一个Master线程和多个Reactor进程,Reactor线程的数量可以配置。

Master线程Master线程用于accept新的连接,然后会评估每个Reactor线程维护的连接数,最后将这个新的连接分配给连接数量最少的那个Reactor线程,从而保证每个Reactor线程的负载量是均衡的。Master线程还负责对所有信号的接管(包括请求处理、重启进程、重载配置等),避免Reactor线程收到信号的打扰中断。

Reactor线程当一个socket可读或可写的时候,就由Reactor线程将事件转发给worker进程。

Manager进程Manager进程管理着Worker进程和Task进程,Worker进程和Task进程是由Manager进程fork出来的。Manager进程会监管Worker进程和Task进程的状态,当他们意外挂掉时,Manager进程会重新拉起新的进程,Manager进程还负责Worker进程和Task进程的平滑重启。

Worker进程Worker进程是由Manager进程fork而来,用于处理具体的业务逻辑。Worker进程可以用同步的方式去干活,也可以用异步的方式去干活。

Task进程Task进程是一种特殊的Worker进程,专门用于处理一些比较耗时的操作。Task进程只能工作在同步的方式下,不能使用异步。所以Task进程中不能使用定时器,而Worker进程可以。

以上就是本文的全部内容,如有错误,请指正!可以相互关注,方便一起交流技术心得。

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部