1、Netty介绍

1.1、Netty是什么

Netty是基于NIO同步非阻塞的一个通信框架,内部封装了NIO的API

1.2、Netty 的特点

(1)高并发

(2)传输快:Netty 的传输依赖于零拷贝特性,尽量减少不必要的内存拷贝

(3)封装好:Netty 封装了 NIO 操作的很多细节,提供了易于使用调用接口

1.3、Netty 高性能表现在哪些方面

(1)同步非阻塞
(2)内存零拷贝:尽量减少不必要的内存拷贝,实现了更高效率的传输;
(3)内存池设计:申请的内存可以重用,内部实现是用一颗二叉查找树管理内存分配情况;
(4)串形化处理读写:避免使用锁带来的性能开销;
(5)高性能序列化协议:支持 protobuf 等高性能序列化协议。

2、BIO、NIO和AIO的区别

(1)BIO:一个连接一个线程

客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。
伪异步IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源。

(2)NIO:一个请求一个线程

但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

(3)AIO:一个有效请求一个线程

客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,

BIO是面向流的,NIO是面向缓冲区的;BIO的各种流是阻塞的。而NIO是非阻塞的;BIO的Stream是单向的,而NIO的channel是双向的。

NIO的特点:事件驱动模型、单线程处理多任务、非阻塞I/O,I/O读写不再阻塞,而是返回0、基于block的传输比基于流的传输更高效、更高级的IO函数zero-copy、IO多路复用大大提高了Java网络应用的可伸缩性和实用性。基于Reactor线程模型。

在Reactor模式中,事件分发器等待某个事件或者可应用或个操作的状态发生,事件分发器就把这个事件传给事先注册的事件处理函数或者回调函数,由后者来做实际的读写操作。如在Reactor中实现读:注册读就绪事件和相应的事件处理器、事件分发器等待事件、事件到来,激活分发器,分发器调用事件对应的处理器、事件处理器完成实际的读操作,处理读到的数据,注册新的事件,然后返还控制权