netty的介绍和架构设计

转自尚硅谷、黑马和各位大神的文章

netty是什么
Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端

Netty 高性能架构设计
线程模型基本介绍

不同的线程模式,对程序的性能有很大影响,为了搞清 Netty 线程模式,我们来系统的讲解下各个线程模式,最后看看 Netty 线程模型有什么优越性。
目前存在的线程模型有:传统阻塞 I/O 服务模型 和Reactor 模式
根据 Reactor 的数量和处理资源池线程的数量不同,有 3 种典型的实现
单 Reactor 单线程;
单 Reactor多线程;
主从 Reactor多线程:Netty 线程模式(Netty 主要基于主从 Reactor 多线程模型做了一定的改进,其中主从 Reactor 多线程模型有多个 Reactor)

主从 Reactor 多线程

在这里插入图片描述

  1. Reactor 主线程 MainReactor 对象通过 select 监听连接事件,收到事件后,通过 Acceptor 处理连接事件
  2. 当 Acceptor 处理连接事件后,MainReactor 将连接分配给 SubReactor
  3. subreactor 将连接加入到连接队列进行监听,并创建 handler 进行各种事件处理
  4. 当有新事件发生时,subreactor 就会调用对应的 handler 处理
  5. handler 通过 read 读取数据,分发给后面的 worker 线程处理
  6. worker 线程池分配独立的 worker 线程进行业务处理,并返回结果
  7. handler 收到响应的结果后,再通过 send 将结果返回给 client
  8. Reactor 主线程可以对应多个 Reactor 子线程,即 MainRecator 可以关联多个 SubReactor

Reactor 模式具有如下的优点
响应快,不必为单个同步时间所阻塞,虽然 Reactor 本身依然是同步的(比如你第一个SubReactor阻塞了,我可以调下一个 SubReactor为客户端服务)
可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程/进程的切换开销
扩展性好,可以方便的通过增加 Reactor 实例个数来充分利用 CPU 资源
复用性好,Reactor 模型本身与具体事件处理逻辑无关,具有很高的复用性

Netty工作原理示意图

在这里插入图片描述

  1. Netty 抽象出两组线程池 ,BossGroup 专门负责接收客户端的连接,WorkerGroup 专门负责网络的读写
  2. BossGroup 和 WorkerGroup 类型都是 NioEventLoopGroup
  3. NioEventLoopGroup 相当于一个事件循环组,这个组中含有多个事件循环,每一个事件循环是 NioEventLoop
  4. NioEventLoop 表示一个不断循环的执行处理任务的线程,每个 NioEventLoop 都有一个Selector,用于监听绑定在其上的 socket 的网络通讯
  5. NioEventLoopGroup 可以有多个线程,即可以含有多个 NioEventLoop
  6. 每个 BossGroup下面的NioEventLoop 循环执行的步骤有 3 步
    轮询 accept 事件
    处理 accept 事件,与 client 建立连接,生成 NioScocketChannel,并将其注册到某个 workerGroup NIOEventLoop 上的 Selector
    继续处理任务队列的任务,即 runAllTasks
  7. 每个 WorkerGroup NIOEventLoop 循环执行的步骤
    轮询 read,write 事件
    处理 I/O 事件,即 read,write 事件,在对应 NioScocketChannel 处理
    处理任务队列的任务,即 runAllTasks
  8. 每个 Worker NIOEventLoop 处理业务时,会使用 pipeline(管道),pipeline 中包含了
    channel(通道),即通过 pipeline 可以获取到对通道,管道中维护了很多的处理器。(这个点目前只是简单的讲,后面重点说)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Netty 4.0 和 Netty 3.0 的区别有以下几点: 1. 支持的 Java 版本:Netty 4.0 支持的 Java 版本是 Java 7 及以上,而 Netty 3.0 只支持 Java 6 及以上。 2. 架构改变:Netty 4.0 在架构上做了很大的改变,使用了与 3.0 不同的组件和 API。 3. 性能提升:Netty 4.0 在性能上有了很大的提升,比 3.0 快得多。 4. 异步改进:Netty 4.0 对异步操作进行了改进,使用了更加高效的方式来处理异步任务。 5. 新的编解码器:Netty 4.0 新增了一些编解码器,支持更多的协议。 6. 更多的优化:Netty 4.0 还进行了更多的优化,比如支持堆外内存、增强的零拷贝等。 ### 回答2: Netty 4.0和Netty 3.0是Java网络编程框架Netty的两个版本。它们之间存在以下区别: 1. 性能提升:Netty 4.0相较于Netty 3.0在性能方面有显著提升。Netty 4.0经过了全面的优化和重构,引入了许多新的特性和改进,使其在处理网络通信时更加高效。 2. API的变化:Netty 4.0对API进行了重构和简化,使得编程接口更加易用和灵活。比如,Netty 4.0引入了ChannelPipelineHandler的概念,可以更加方便地添加和管理多个处理器。 3. 事件处理模型:Netty 4.0采用了新的事件处理模型,即Reactor模型,使得在高并发场景下的事件处理更加高效。而Netty 3.0采用的是NIO Selector模型。 4. 内存管理:Netty 4.0引入了更高级的内存管理机制,即ByteBuf和Recycler。ByteBuf提供了更加灵活的内存分配和回收方式,减少了内存的创建和销毁开销。Recycler可以对对象进行重用,减少了频繁的对象创建和垃圾回收开销。 5. 异常处理:Netty 4.0对异常处理进行了优化,提供了更加丰富的异常类型和处理方式。Netty 3.0在异常处理方面相对简单。 总的来说,Netty 4.0相较于Netty 3.0在性能、API设计、事件处理模型、内存管理和异常处理方面都有较大的改进和优化。因此,Netty 4.0更加适合开发高性能、高并发的网络应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值