深入学习swoole之进程,客户端和服务端交互

进程及进程结构


进程就是操作系统中一个正在运行的程序,我们在一个终端当做,通过php,运行一个php文件,这个时候就相当于创建了一个进行,这个进行会在系统中驻扎,申请属于它自己的内存空间系统资源并且运行相应的程序;

          对于一个进程来说,它的核心内容分为两个部分,一个是它的内存,这个内存是这个进程创建之初从系统分配的,它所有创建的变量,都会存储在这一片内存环境中;

          一个是它的上下文环境我们知道进程是运行在操作系统中的,那么对于程序来说,它的运行依赖操作系统分配给它的资源,操作系统的一些状态;在操作系统中可以运行多个进程,对于一个进程来说,它可以创建自己的子进程(多个)子进程和父进程一样,拥有自己的内存空间和上下文环境;

MyAnswer博客



进程结构图

MyAnswer博客


1. Mster进程:主进程------>>处理swoole的核心事件驱动,那么我看到它拥有多个Main Reactor[线程]以及多个Reactor[线程],swoole所有对事件的监听都会在这些线程中实现,比如来自客户端的连接,信号处理等; Reactor线程组: 心跳包检测线程,swoole配置了心跳检测后,心跳包线程会在固定时间内对所有之前的连接发送检测数据包;

MyAnswer博客

2. Manager进程:管理进程------->>swoole想要实现最好的性能必须创建出多个工作进程帮助处理任务,但Work进程就必须fork进程,但是fork操作是不安全的,如果没有管理会出现很多僵尸进程,进而影响服务器性能,同时work进程被误杀或者由于程序的原因异常退出,为了保证服务的稳定性,需要重新创建work进程; 对于work,task进程的创建,回收等操作全权有 Manager进程管理;

Manager进程和Work/Task进程的关系:MyAnswer博客

3. Work进程:工作进程------>> Work进程属于swoole的主逻辑进程,用户处理客户端的一系列请求,接受由Reactor线程投递的请求数据包,并执行PHP回调函数处理数据生产响应数据并发给Reactor线程,由Reactor线程发给TCP客户端可以使异步非阻塞模式,也可以是同步阻塞模式;

4. Task进程:异步任务工作进程------> TaskWork是swoole提供异步工作进程,这些进程主要用于处理一些耗时较长的同步任务,在work进程中投递过来;



进程查看以及进程梳理:

  当启动一个swoole应用时,一个共会创建 2+n+m个进程, 2为一个master进程和一个manager进程,其中N为Work进程数,M 为TaskWork进程数量;

  默认如果不设置,swoole底层会根据当前机器有多少CPU核数,启动对应数量的Reactor线程和Work进程;

MyAnswer博客



Client跟Server的交互:

1.Client请求达到 Min Reactor, Client实际上是与Master进程中的某一个Reactor线程发生了连接;

2.Min Reactor根据Reactor的情况,将请求注册给对应的Reactor(每个Reactor都有epoll ,用来监听客户端的变化)

3.客户端有变化时Reactor将数据交给worker来处理

4.worker处理完毕,通过进程间通信(比如管道,共享内存,消息队列)发给对应的Reactor

5.Reactor将响应结果发给相应的连接请求处理完成

MyAnswer博客

MyAnswer博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论