Netty与IO模型简介
1、Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github 上的独立项目。
2、Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。
3、Netty 主要针对在 TCP 协议下,面向 Client 端的高并发应用,或者 Peer-to-Peer 场景下的大量数据持续传输的应用。
4、Netty 本质是一个 NIO 框架,适用于服务器通讯相关的多种应用场景。
Neety常用于各种框架的底层通讯,比如常见的RPC框架Dubbo
Netty
作为高性能的基础通信组件,提供了TCP/UDP
和HTTP
协议栈,方便定制和开发私有协议栈,账号登录服务器。经典的
Hadoop
的高性能通信和序列化组件Avro
的RPC
框架,默认采用Netty
进行跨界点通信。建议书籍:https://waylau.com/essential-netty-in-action/index.html
I/O 模型
-
I/O
模型简单的理解:就是用什么样的通道进行数据的发送和接收 -
Java
共支持3
种网络编程模型I/O
模式:BIO
、NIO
、AIO
。 -
Java BIO
:同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。【简单示意图】
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MIFDWQ7O-1691414215158)(https://gitee.com/gpsj/cloud-imgage/raw/master/img/%E6%9C%AA%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6.png)]
Java NIO
:同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O
请求就进行处理。【简单示意图】
Java AIO(NIO.2)
:异步非阻塞,AIO
引入异步通道的概念,采用了Proactor
模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多且连接时间较长的应用。