本篇文章参考了韩顺平老师的Netty视频教程,想要更细致的了解netty可以观看该教程进行学习。
1.什么是Netty
Netty 是一个广泛使用的 Java 网络编程框架投,它是基于NIO(Nonblocking I/O,非阻塞IO),开发的网络通信框架,对比于BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高。理解Netty首先要说说java的I/O模型:java一共支持三种:NIO,BIO,AIO,下面分别介绍一下这三种IO模型
1.1 同步阻塞IO模型(BIO)
即同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就启动一个线程进行处理。如果当前连接没有需要处理的事件,线程将处于阻塞状态。其简易示意图为下图:
优点:实现简单,适用于连接数目比较小且固定的架构
缺点:这个连接不做任何事情会造成不必要的线程开销, 并且当并发数较大时,需要创建大量线程来处理连接,系统资源占用较大。
1.2 同步非阻塞IO模型(NIO)
服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器(selector)上,多路复用器轮询到连接有 I/O
请求就进行处理。 具体来说,NIO 基于Channel(通道)和 Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从Buffer写入到通道中。Selector(选择器)用于监听多个通道的事件(比如:连接请求,数据到达等),因此使用单个线程就可以监听多个客户端通道。其简易示意图如图所示。
这里