Netty介绍
找个比较官方的介绍
Netty 是由 JBOSS 提供的一个 Java 开源框架。 Netty 提供异步的、基于事件驱动的网络应用程序框 架,用以快速开发高性能、高可靠性的网络 IO 程序。 Netty 是一个基于 NIO 的网络编程框架,使用 Netty 可以帮助你快速、简单的开发出一 个网络应用,相当于简化和流程化了 NIO 的开发过程。作为 当前最流行的 NIO 框架, Netty 在互联网领域、大数据分布式计算领域、游戏行业、 通信行业等获得了广泛的应用,知名的 Elasticsearch 、 Dubbo 框架内部都采用了 Netty 。
架构图
从图中我们能看到,Netty内部支持的协议、功能还是非常丰富的,零拷贝、可扩展时间模型,支持TCP、UDP等协议,还提供了安全传输、压缩等等的辅助功能
优势
1. 设计优雅,提供阻塞和非阻塞的 Socket;提供灵活可拓展的事件模型;提供高度可定制的线程模型。2. 具备更高的性能和更大的吞吐量,使用零拷贝技术最小化不必要的内存复制,减少资源的消耗。3. 提供安全传输特性。4. 支持多种主流协议;预置多种编解码功能,支持用户开发私有协议。
线程模型
目前存在的线程模型主要是两个
1、传统阻塞IO服务模型
概念:采用的是阻塞IO模式获取输入的数据,每个连接都需要对应的线程来完成数据处理
模型图:
存在的问题:
- 当并发数很大,就会创建大量线程,不过请求是不是有效的,都会占用很大的资源
- 连接创建后,如果当前线程处理的是读取数据,但对应的数据是空,那这个读操作就会一直阻塞,会造成资源浪费
2、Reactor模型
概念:通过一个或者多个输入同时传递给服务处理器的模式,接收到多个请求时,会将这些请求同步分派到对应的线程进行处理
根据Reactor的数量和处理资源池线程的数量不同,又分为三种实现
- 单Reactor单线程
- 单Reactor多线程
- 主从Reactor多线程
Netty是基于主从Reactor多线程模式,然后再其基础上做了一些改进