swoole

php是单线程。php是靠多进程来处理任务,任何后端语言都可以采用多进程处理方式。如我们常用的php-fpm进程管理器线程与协程,大小的关系是进程>线程>协程,而我们所说的swoole让php实现了多线程,其实在这里来说,就是好比让php创建了多个进程,每个进程执行一条线程,从而实现了php"多线程"(java是在一个进程内创建多个线程).

swoole中我启动了一个serve像一个工厂,有两个主要进程,master和manager进程。master进程像创始人老板负责单子业务洽谈,有钱有资源,他拉来一批职业经理人manager进程帮自己管理厂子,然后manager就fork出来很多工人worker进程来干活,后来发现供应物料后勤什么的比较费时间就交给了taskworker进程来做。这样的话一个serve工厂就建立起来了。
在这里插入图片描述
swoole执行流程
当客户端请求进入Master主进程后会被Master主线程接收到
将读写操作的监听注册到对应的Reactor线程中,并通知Worker工作进程处理onConnect,也就是接收到连接的回调。
客户端的数据会通知对应的Reactor线程并发送给Worker工作进程进行处理。
如果Worker工作进程投递任务,将数据通过管道发送给Task任务进程,Task任务进程处理完后会发送给Worker工作进程。
Worker工作进程会通知Reactor线程发送数据给客户端。
当Worker工作进程出现异常时关闭,Manager管理进程会重新创建一个Worker工作进程,保证Worker工作进程的数量是固定的。

在这里插入图片描述
Swoole Coroutine和 Go Goroutine的区别
swoole的协程需要在协程上下文中使用
swoole的协程是通过hook底层php函数实现的,go是原生支持的
swoole是单线程协程,同一时间只会调度一个协程,而go是多线程实现的

Swoole 是常驻内存的,怎么防止内存泄漏
1.swoole 的worker进程 可以设置max_request和task_max_request参数,来控制进程处理完多次请求后自动销毁
2.使用完之后及时关闭对象或资源

Swoole-HTTP-Server模型
Swoole-HTTP-Server模型

Swoole-HTTP-Server和LNMP-with-Swoole相比有巨大的变化,这种模型中充当WebServer角色的构件不仅仅有nginx,应用本身也包含了一个内建WebServer,不过由于Swoole Http Server不是专业的Http Server,对Http的处理不完善 ,因此仍然需要使用Nginx作为静态资源服务器以及反代,Swoole Http Server仅仅处理PHP相关的Http流量。
一方面由于Swoole已经包含了WebServer,不再需要实现cgi或者fast-cgi的通用协议去和WebServer通信,另一方面Swoole有自己的进程管理,因此PHP-fpm可以直接被去除了。对于PHP资源而言,在这种模型中,Swoole Http Server的地位相当于传统模型中的nginx和PHP-fpm之和。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值