• IO模型5-进阶-Netty模型


    1. Netty是什么

    • Netty是JBOSS提供的一个java开源框架, 基于事件驱动的一个网络应用程序框架, 用于快速开发高性能的网络IO程序
    • dubbo,ES, redis等都使用了netty

    2. IO线程模型

    • IO线程模型有
      • 传统的阻塞IO模型
      • Reactor模型: 单Reactor单线程,单Reactor多线程,主从Reactor多线程
    • netty主要是针对主从Reactor多线程模型进行改进

    3. Reactor模型

    Reactor模式也叫分发者模式, 获取到连接, 将连接分发到后台多线程handler进行处理(多线程版)

    • 单Reactor单线程

      • 一个单个线程处理连接, 然后通过该单线程线程处理连接后的读写操作(handler)
      • Reactor和数据处理都在一个线程中
      • 单个线程又做连接处理又做数据处理在这里插入图片描述
    • 单Reactor多线程

      • 单个线程处理连接和响应, 然后通过多个线程处理连接后的读写操作(handler)
      • Reactor是单线程, 数据处理是多线程
        在这里插入图片描述
    • 主从Reactor多线程

      • 多个线程处理连接, 然后通过多个线程处理连接后的读写操作
      • Reactor和Handler都是多线程版
      • 主线程Reactor只做连接处理, 从线程Reactor做响应处理,工作线程做数据处理
        在这里插入图片描述

    4. Netty的Reactor模型

    • Netty抽象出两组线程池(类型都是NioEventLoopGroup)
      • BossGroup: 主要处理连接事件
      • WorkGroup: 主要处理read/write事件
    • BossGroup:
      • 每个BossGroup中都有多个线程, 多个NioEventLoop(事件循环), 有多个Selector
      • BossGroup_NioEventLoop: 处理三件事
        1. accept: 监听绑定在这个NioEventLoop上的accept事件
        2. register: 将新连接的NioSocketChannel注册到workGroup其中的一个Selector
        3. runAllTasks: 处理队列里面的任务
    • WorkGroup:
      • 每个WorkGroup中都有多个线程, 多个NioEventLoop(事件循环), 有多个Selector
      • WorkGroup_NioEventLoop: 处理三件事
        1. 循环判断是否有read/write事件发生
        2. 处理read/write事件
        3. runAllTasks: 处理队列里面的任务

    在这里插入图片描述

  • 相关阅读:
    POSIX
    按字典序排序还是按长度排序
    CVE-2022-0543 Redis沙盒逃逸漏洞
    关于AI时代的程序架构的变化
    Java EnumSet clone()方法具有什么功能
    全球疫情带来的危机与机遇
    搭建游戏要选什么样的服务器?
    每天五分钟机器学习:聚类算法k-means在实际问题中的应用
    【MySQL篇】第二篇——库的操作
    QT DAY 4
  • 原文地址:https://blog.csdn.net/qq_15740267/article/details/127779764