Netty知识点

100 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


 www.bilibili.com/video/BV1DJ…

Netty是基于Java NIO的异步事件驱动的网络应用框架

用于快速开发高性能,高可靠行的网络程序  

1) Netty是java开源框架,提供异步的,事件驱动的网络应用程序框架,可以快速开发性能、高可靠的网络io程序

2) Netty简化和流程化了IO开发过程

3) 是最流行的NIO框架,很多行业都有应用(如dubbo,Elasticsearch),表现很好

1. 为什么不用传统NIO编程****

(1) 原生NIO存在的问题****

image.png

NIO类库和API繁琐(选择器,管道,buffer)

掌握多线程编程

掌握网络编程

NIO有bug

2. Netty 优点****

(1) 设计优雅:****

统一api,灵活可扩展的事件模型,具有可定制的线程模型

(2) 使用方便:****

丰富的开发文档和用户指南,没有依赖项

(3) 高性能****

吞吐量高,延迟低,资源消耗少

(2) 安全:****

支持SSL/TSL和startTSL

(3) 社区活跃****

问题能及时修复,更多新功能会被加入,版本迭代周期短

 

3. Netty 线程模型****

Netty主要基于主从reactor多线程模型做了一定的改进

 

主从多线程模型有多个reactor

 

4. reactor模式****

指通过一个或多个输入同时传递给服务处理器的模式(基于事件驱动)

服务器程序处理传入的多个请求,并将它们同步分派到相应分处理线程

reactor模式使用io复用监听事件,收到事件后,分发给某个线程,这点就是网络服务器高并发处理的关键  

(1) reactor核心组成****

1) reactor分发器

负责监听和分发事件

2) Handlers处理器

处理来自分发器的IO事件

 

(2) reactor三种典型实现****

有连接器负责连接,连接后就全部走分发器****

1) 单reactor单线程

特点:Handler既收数据,也做数据处理

image.png

2) 单reactor多线程

特点:Handler只接收数据,不做数据处理,数据处理交给线程池

缺点:多线程数据共享复杂,单reactor在高并发会有瓶颈(连接和分发上)

image.png

 

3) 主从reactor多线程:这是netty采用的

特点:

①一个主reactor,多个子reactor,线程池处理IO事件

②主reactor负责连接,子reactor负责分发

③子reactor分发事件给Handler,Handler将数据处理交给线程池处理  

image.png

5. Netty模型****

image.png

(1) 详细版示意图****

  image.png

image.png

①Netty抽象出两组线程池BossGroup专门负责接收客户端的连接,workerGroup专门负责网络的读写

②BossGroup和workerGroup都是NIOEventLoopGroup

③NIOEventLoopGroup相关一个事件循环组,里面的每一个循环是NIOEventLoop

④NIOEventLoop表示一个不断循环的执行处理任务的线程,每个NIOEventLoop都有一个selector,用于监听绑定在其上的socket的网络通讯

⑤NIOEventLoopGroup有多个线程。即可以包含多个NIOEventLoop

  ⑥BossGroup循环执行,轮训连接事件(accept),建立与客户端的连接,生成NioSocketChannel,并注册到某个workerNioEventLoop 上的selector

⑦WorkerGroup循环执行,轮训读写事件,在对应的NioSocketChannel处理io事件 ⑧每个WorkerGroup处理业务时,会用到pipeline(管道),管道包含Channel,管道维护很多的处理器