swoole架构
博客专区 > 吾爱 的博客 > 博客详情
swoole架构
吾爱 发表于4个月前
swoole架构
  • 发表于 4个月前
  • 阅读 47
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

输入图片说明 swoole的强大之处就在与其进程模型的设计,既解决了异步问题,又解决了并行。

主线程MainReactor swoole启动后主线程会负责监听server socket,如果有新的连接accept,主线程会评估每个Reactor线程的连接数量。将此连接分配给连接数最少的reactor线程。这样的好处是

每个reactor线程持有的连接数是非常均衡的,没有单个线程负载过高的问题 解决了惊群问题,尤其是拥有多个listen socket时,节约了线程唤醒和切换的开销 主线程内还接管了所有信号signal的处理,使Reactor线程运行中可以不被信号打断。 管理进程Manager swoole运行中会创建一个单独的管理进程,所有的worker进程和task进程都是从管理进程Fork出来的。管理进程会监视所有子进程的退出事件,当worker进程发生致命错误或者运行生命周期结束时,管理进程会回收此进程,并创建新的进程。

管理进程还可以平滑地重启所有worker进程,以实现程序代码的重新加载。

异步Reactor线程 swoole拥有多线程Reactor,所以可以充分利用多核,开启CPU亲和设置后,Reactor线程还可以绑定单独的核,节约CPU Cache开销。

swoole的Reactor线程是全异步非阻塞的,即使你的worker进程用了同步模式,依然不影响reactor线程的性能。在worker进程组很繁忙的状况下,reactor线程完全不受影响,依然可以收发处理数据。

TCP是流式的,没有边界,所以处理起来很麻烦。Reactor线程可以根据EOF或者包头长度,自动缓存数据,组装数据包。等一个请求完全收到后,再投递给Worker进程。

同步或异步Worker进程 与传统的半同步半异步服务器不同,Swoole的worker进程可以是同步的也可以异步的,这样带来了最大的灵活性。当你的Server需要很高性能,业务逻辑较为简单时你可以选择异步模式。当业务逻辑复杂多变,可以选择同步模式。

这里要比Node.js强大太多了。

TaskWorker进程池 swoole除了Reactor线程,Worker进程外还提供了TaskWorker进程池,目的是为了解决在业务代码中,有些逻辑部分不需要马上执行。利用task进程池,可以方便的投递一个异步任务去执行,在Worker进程空闲时再去捕获任务执行的结果。

标签: PHP
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 142
博文 255
码字总数 88909
×
吾爱
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: