Netty的简介、BIO NIO AIO和Reactor模型

✅Netty简介

Netty是由JBOSS提供的一个Java开源框架
Netty提供异步的 基于事件驱动的网络应用程序框架和工具 用于快速开发高性能 高可靠性的网络服务器和客户端程序
也就是说 Netty是一个基于NIO的客户端和服务器端编程框架
使用Netty可以快速简单开发出一个网络应用 例如实现了某种协议的客户端和服务端应用
相当于 Netty是简化了网络应用的编程开发过程

特点

  • Netty提供了简单易用的API
  • 基于事件驱动的编程方式来编写网络通信程序
  • 支持更好的吞吐量

✅BIO、NIO、AIO

BIO:

同步阻塞IO( Block IO)
IO操作时会阻塞线程 并发处理能力低
一个Socket连接一个处理线程(该线程负责该Socket连接的一系列数据传输操作)
由于操作系统允许的线程数量是有限的 因此多个Socket申请与服务端建立连接时 服务端不能提供相应数量的处理线程
因此未被分配到处理线程的连接就会阻塞或被拒绝

NIO:

同步非阻塞IO(None-Block IO)
NIO是对BIO的改进 基于Reactor模型
一个Socket连接只有在特定时候才会发生数据传输的IO操作 大部分时候数据通道都是空闲的 但还占用着线程
因此 NIO所做的改进就是一个请求一个线程 在连接到服务端的众多Socket中 只有需要进行IO操作的才能获取到服务端的处理线程进行IO操作
这样 就不会因为线程不够用而限制了Socket的接入了

AIO:

异步非阻塞IO(Async None-Block IO)
由操作系统先完成了客户端请求的处理 然后再通知服务器去启动线程进行处理
也被称为NIO2.0 在JDK7后开始支持

✅Netty的Reactor模型

Reactor模型 分为单线程模型 多线程模型 和 主从多线程模型

单线程模型

用户发起IO请求到Reactor线程 然后Reactor线程将用户的IO请求放入通道 然后进行后续处理
当处理完成后 Reactor线程重新获得控制权 然后继续进行其它客户端的处理

缺点

  • 1、单线程的Reactor模型 每个用户时间都在一个线程中执行
  • 2、性能有极限
  • 3、当负荷到达一定程度 性能会下降
  • 4、某个事件处理器发生故障时 无法继续处理其它的事件

多线程模型

一组NIO线程来处理IO操作 任务可以同时执行
在请求处理上效率会更高 可以处理更多的客户端请求

主从多线程模式

(Netty推荐使用该线程模型)
适用于高并发场景 一组线程池接收请求 一组线程池处理IO
在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/Piconjo/article/details/106904587