• swoole 笔记


    Master 进程、Reactor 线程、Worker 进程、Task 进程、Manager 进程的区别与联系

    Master 进程

    Reactor 线程

    • Reactor 线程是在 Master 进程中创建的线程
    • 负责维护客户端 TCP 连接、处理网络 IO、处理协议、收发数据
    • 不执行任何 PHP 代码
    • 将 TCP 客户端发来的数据缓冲、拼接、拆分成完整的一个请求数据包

    Worker 进程

    • 接受由 Reactor 线程投递的请求数据包,并执行 PHP 回调函数处理数据
    • 生成响应数据并发给 Reactor 线程,由 Reactor 线程发送给 TCP 客户端
    • 可以是异步非阻塞模式,也可以是同步阻塞模式
    • Worker 以多进程的方式运行

    TaskWorker 进程

    Manager 进程

    • 负责创建 / 回收 worker/task 进程

    他们之间的关系可以理解为 Reactor 就是 nginxWorker 就是 PHP-FPMReactor 线程异步并行地处理网络请求,然后再转发给 Worker 进程中去处理。Reactor 和 Worker 间通过 unixSocket 进行通信。

    在 PHP-FPM 的应用中,经常会将一个任务异步投递到 Redis 等队列中,并在后台启动一些 PHP 进程异步地处理这些任务。Swoole 提供的 TaskWorker 是一套更完整的方案,将任务的投递、队列、PHP 任务处理进程管理合为一体。通过底层提供的 API 可以非常简单地实现异步任务的处理。另外 TaskWorker 还可以在任务执行完成后,再返回一个结果反馈到 Worker

    Swoole 的 ReactorWorkerTaskWorker 之间可以紧密的结合起来,提供更高级的使用方式。

    一个更通俗的比喻,假设 Server 就是一个工厂,那 Reactor 就是销售,接受客户订单。而 Worker 就是工人,当销售接到订单后,Worker 去工作生产出客户要的东西。而 TaskWorker 可以理解为行政人员,可以帮助 Worker 干些杂事,让 Worker 专心工作。

    如图:

    process_demo

     扩展: 

    • Master 主进程
      • 主进程内有多个 Reactor 线程,基于 epoll/kqueue 进行网络事件轮询。收到数据后转发到 Worker 进程去处理
    • Manager 进程
      • 对所有 Worker 进程进行管理,Worker 进程生命周期结束或者发生异常时自动回收,并创建新的 Worker 进程
    • Worker 进程
      • 如果开启了 log_file 设置,信息会打印到指定的 Log 文件中。
      • 启动失败扩展内会抛出致命错误,请检查 php error_log 的相关信息。errno={number} 是标准的 Linux Errno,可参考相关文档。
      • 对收到的数据进行处理,包括协议解析和响应请求。未设置 worker_num,底层会启动与 CPU 数量一致的 Worker 进程。
  • 相关阅读:
    join命令
    参与者模式
    字符串中的第一个唯一字符
    Git与SVN对比
    惰性模式
    .NET Conf 2020
    使用Github部署Azure应用服务
    Azure Terraform(一)入门简介
    打日志还能打出个线上Bug_ 太难了。。。
    让API并行调用变得如丝般顺滑的绝招
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452442.html
Copyright © 2020-2023  润新知