本文将介绍以下内容:1.SwooleServer的运行模式2.Swoole进程模型分析上图是Swoole官网提供的各个进程的相互关系图。可以说,我们看懂了这张图,就明白了Swoole的进程模型。一、SwooleServer的运行模式Swoole服务常见的运行模式有单线程模式和进程模式。两种模式介绍如下:单线程模式(SWOOLE_BASE)这种模式就是传统的异步非阻塞Server,兼容Nginx和Node.js等异步服务原理相同。在这种模式下,事件循环将直接回调PHP函数,而不是通过线程调度来传递任务。如果回调函数中有阻塞操作,会导致Server退化为同步模式。上一篇Nginx+PHP-FPM架构中介绍,Nginx只是转发,具体业务由PHP-FPM实现。如果Nginx也能处理业务逻辑,一旦出现业务逻辑阻塞,Nginx的性能就会急剧下降。正是因为Nginx和PHP-FPM扮演的不同角色,才会造就Nginx的高性能。Base模式的特点:没有Master进程的作用;Process模式下每个Worker进程同时承担Reactor线程和Worker进程的职责;在这种模式下,管理过程是可选的。当设置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线程用于接受新的连接,然后评估每个Reactor线程维护的连接数,最后将这个新连接分配给连接数最少的Reactor线程,从而保证每个Reactor线程的负载Reactor线程是平衡的。Master线程还负责接管所有信号(包括请求处理、重启进程、重新加载配置等),避免Reactor线程接收信号中断。Reactor线程当一个套接字可读或可写时,Reactor线程将事件转发给工作进程。Manager进程Manager进程管理Worker进程和Task进程,Worker进程和Task进程由Manager进程fork出来。Manager进程会监督Worker进程和Task进程的状态。当他们意外挂断时,Manager进程会重新启动一个新的进程。Manager进程还负责Worker进程和Task进程的平滑重启。Worker进程Worker进程是从Manager进程派生出来的,用于处理具体的业务逻辑。工作进程可以同步或异步工作。Task进程Task进程是一种特殊的Worker进程,专门用来处理一些耗时的操作。任务进程只能同步工作,不能异步。所以定时器不能用在Task进程中,但是Worker进程可以。以上就是本文的全部内容,如有错误,敬请指正!大家可以互相关注,一起交流技术经验。
