码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Netty高性能之Reactor模型


    Reactor模型

    Reactor 是一种模式,它要求主线程只负责监听文件描述符(I/O处理单元)是否有事件发生,有的话就立即将该事件通知工作线程(逻辑单元)完成处理。除此之外,主线程不做任何其他实质性的工作。读写数据以及处理客户请求均在工作线程中完成。

    Netty中的Reactor模型

    Netty 中的 Reactor 模型主要由多路复用器 (Acceptor)、事件分发器 (Dispatcher)、事件处理器 (Handler) 组成,可以分为单线程模型,多线程模型和主从Reactor多线程模型三种。

    • Reactor单线程模型

    • Reactor多线程模型

    • 主从Reactor多线程模型

    Reactor 模式可以参考:Reactor模式详解+源码实现

    1. 单线程模型

    所有 I/O 操作都由一个线程完成,即多路复用、事件分发和处理都是在一个 Reactor 线程上完成的,一个 Reactor 线程就是一个 NIO 线程。

    ​Reactor 单线程模型使用的是一个 NIO 线程, NIO 使用的是非阻塞 I/O,所有的 I/O 操作都不会阻塞,所以一个线程可以处理多个 TCP 连接请求。

    对于一些小容量应用场景,可以使用单线程模型,但是对于高负载、大并发的应用却不合适,主要原因如下:

    • 一个 NIO 线程同时处理成百上千的链路,性能上无法支撑。即便 NIO 线程的CPU负荷达到100%,也无法满足海量消息的编码、解码、读取和发送;

    • 当 NIO 线程负载过重之后,处理速度将变慢,这会导致大量客户端连接超时,超时之后往往进行重发,这更加重了 NIO 线程的负载,最终导致大量消息积压和处理超时,NIO 线程会成为系统的性能瓶颈;

    • 可靠性问题。一旦 NIO 线程意外跑飞,或者进入死循环,会导致整个系统通讯模块不可用,不能接收和处理外部信息,造成节点故障。

    2 Reactor多线程模型

    Reactor多线程模型与单线程模型最大区别就是有一组 NIO 线程处理 I/O 操作,它的特点如下:

    • 有一个专门的 NIO 线程用于监听服务端,接收客户端的TCP连接请求;

    • 网络I/O读、写操作等由一个 NIO 线程池负责,线程池可以采用标准的 JDK 线程池实现(Netty 扩展了 JDK 线程池)

  • 相关阅读:
    计算机毕业设计:基于html制作大学生网上报到系统响应式模板项目源码
    基于MATLAB的采样保持器的仿真
    DEJA_VU3D - Cesium功能集 之 059-腾讯地图纠偏
    【校招VIP】前端基础之post和get
    使用Python插入100万条数据到MySQL数据库并将数据逐步写出到多个Excel
    Python 之 sqrt函数浅析
    【后端面经-数据库】Redis数据结构和底层数据类型
    2023年09月个人工作生活总结
    Python面向对象特性——多继承【Python中的mro方法搜索顺序、新式类和旧式(经典)类)】
    【校招VIP】前端JS语言之数据类型
  • 原文地址:https://blog.csdn.net/Linuxhus/article/details/127089648
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号