`

swoole的进程模型架构

阅读更多

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

主线程MainReactor

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

  1. 每个reactor线程持有的连接数是非常均衡的,没有单个线程负载过高的问题
  2. 解决了惊群问题,尤其是拥有多个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进程空闲时再去捕获任务执行的结果。

 

http://rango.swoole.com/archives/305

分享到:
评论

相关推荐

    Swoole Loader扩展.7z

    Swoole是一款开源的PHP异步并行框架,它使PHP开发者能够构建高性能的网络服务器,尤其适合微服务架构和实时Web应用。 首先,我们要理解Swoole扩展的作用。Swoole扩展为PHP提供了原生的多线程、多进程、TCP/UDP网络...

    SWOOLE聊天室.zip

    3. **Swoole聊天室架构**:"swoole_chat"项目中的主要组件包括WebSocket服务器、客户端连接管理、消息广播等。服务器端需要维护一个连接池,记录每个客户端的连接状态,当接收到新的消息时,通过广播机制将消息分发...

    swoole-4.4.8.tgz

    在并发处理方面,Swoole的异步非阻塞I/O模型使得服务器可以同时处理大量并发请求,而无需为每个请求分配独立的线程或进程,这大大降低了内存消耗和上下文切换的开销。此外,Swoole的协程机制使得在PHP中实现并行计算...

    swoole分布式通讯框架

    1. **异步非阻塞I/O**:Swoole使用事件驱动模型,所有网络操作均为异步非阻塞,避免了传统同步I/O导致的线程阻塞问题,提高了系统并发能力。 2. **协程(Coroutine)**:Swoole支持协程编程,无需手动管理线程和...

    快速掌握swoole.zip

    4. **EasySwoole框架**:熟悉EasySwoole的架构和组件,如路由配置、中间件机制、数据库连接等,快速搭建应用。 5. **WebSocket应用**:学习如何使用Swoole构建WebSocket服务器,实现双向通信,例如聊天室、游戏...

    php_swoole_loader_php71_nzts_x64.7z

    7. **协程(Coroutine)**:这是Swoole的一大特色,无需手动管理线程和进程,通过简单的编程模型即可实现异步操作,降低了并发编程的复杂度。 8. **异步I/O**:Swoole的异步I/O模型能够高效处理磁盘读写、数据库...

    php_swoole_loader_php73_nzts_x64.zip

    2. **异步I/O**:Swoole的事件驱动模型使得它可以进行非阻塞的I/O操作,显著提高程序运行效率。 3. **协程(Coroutine)**:Swoole引入了轻量级的协程概念,使得开发者可以在PHP中编写出类似多线程的并发代码,而...

    swoole_4.3.1_815999d8_x86-64.zip

    标题 "swoole_4.3.1_815999d8_x86-64.zip" 暗示我们正在处理一个与Swoole相关的软件包,版本号为4.3.1,这是一个针对x86-64架构的版本,即64位操作系统。Swoole是一个高性能的PHP扩展,它提供了诸如异步多线程、事件...

    swoole1.9.3版本

    Swoole基于事件驱动的架构,能够有效地处理大量并发连接。通过注册事件处理器,当特定事件发生时,会自动调用相应的回调函数。 10. **热更新能力** Swoole 1.9.3版本可能包含热更新功能,允许在不中断服务的情况...

    Swoole入门到实战打造高性能赛事直播平台

    Swoole引入了协程(Coroutine)的概念,这是一种轻量级的线程模型。与传统线程相比,协程的切换开销更低,可以在不消耗过多系统资源的情况下实现高并发。在Swoole中,开发者可以通过简单的语法糖来编写异步非阻塞的...

    swoole.txt

    - **Swoole 支持**:Swoole 同时支持多进程和多线程模型,可以根据应用场景灵活选择。 **3. 协程** - **概念**:协程是一种比线程更轻量级的并发模型,可以在单个线程内实现并发。 - **优势**: - 性能更高:...

    swoole.rar

    2. **基础概念**:讲解Swoole的核心概念,如服务器模型(如TCP、UDP、HTTP等)、事件驱动模型、进程管理、线程模型等,帮助初学者理解Swoole的工作原理。 3. **启动与管理**:介绍如何启动Swoole服务器,以及如何...

    Linux下源码包安装Swoole及基本使用操作图文详解

    Linux环境下安装Swoole...对于初学者而言,从简单的示例入手,逐步掌握Swoole的异步编程模型和协程操作,是非常必要的。随着对框架熟悉度的提升,可以探索使用Swoole构建更加复杂的网络应用,如直播服务器、聊天室等。

    基于swoole实现的自带httpserver的web开发框架

    8. **热更新**:Swoole的进程管理机制允许在不停止服务的情况下进行代码更新,减少了系统维护的时间成本。 文件 "xtgxiso-WebWorker-swoole-253560f" 可能是这个框架的源代码仓库或者特定版本的打包文件,包含框架...

    PHP高级Web开发框架Swoole深入解读+实战案例

    4. **内存管理**:为了进一步提升性能,Swoole采用了自定义的内存池机制来管理内存分配和回收过程。这种方式避免了频繁调用操作系统级别的malloc/free函数所带来的额外开销。 5. **网络通信**:Swoole内置了多种网络...

    千锋PHP异步通信框架Swoole解读+源码

    3. **微服务架构**:结合Swoole的特性,可以构建轻量级的服务发现、负载均衡等功能,支撑复杂的微服务架构。 4. **数据分析平台**:Swoole的高性能特性非常适合处理大量数据的实时分析任务,如日志收集、流量监控等...

    swoole-src-analysis, php swoole扩展的源码学习记录.zip

    Swoole的核心架构基于事件驱动模型,通过libevent或libuv库实现异步非阻塞I/O。其设计包含四个主要组件:Server、Client、EventLoop和Socket。Server用于处理网络连接,Client是连接Server的客户端,EventLoop负责...

    一个高性能的HTTP服务器来加速基于Swoole的LaravelLumen应用

    而Swoole通过异步非阻塞模型,能更好地利用CPU和内存资源,提高吞吐量。 3. **Laravel/Lumen框架**:Laravel是优雅的PHP Web开发框架,Lumen则是其轻量级版本,两者都提供了强大的路由、中间件、数据库操作等工具,...

    FastSwoole基于swoole扩展开发的高性能web框架

    FastSwoole采用了典型的Server-Worker模型,主进程(Master)负责管理和调度工作进程(Worker),工作进程处理客户端请求。每个工作进程内部,通过Swoole的Event Loop和协程调度,实现对多个连接的并发处理。 ### 4...

Global site tag (gtag.js) - Google Analytics