Netty为什么放弃使用AIO

Netty为什么放弃使用AIO

前言

为什么Netty使用NIO,而不使用AIO

NIO和AIO的区别

NIO模型(同步非阻塞)

NIO有同步阻塞和同步非阻塞两种模式,一般讲的是同步非阻塞,服务器实现模式为一个请求一个线程,但客户端发送的连接请求都会注册到一个多路复用器上,多路利用器轮询到连接有I/O请求时才启动一个线程进行处理。

AIO模型 (异步非阻塞)

服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。

然后看下Netty作者在这个问题上的原话

Not faster than NIO(epoll) on unix systems (which is true) 译:在UNIX系统上不比NIO快

There is no daragream support 译:不支持数据报

Unnecessary threading model(too much abstraction without usage) 译:不必要的线程模型

所以我们可以总结出以下几点:

在LINUX系统上,AIO底层实现仍使用Epoll,没有很好的实现AIO,因此性能上没有明显优势,而且被JDK封装了一层不容易优化

Netty整体架构是基本reactor模型,而aio是proactor模型,混合在一起会比较混乱

aio还有个缺点是接收数据需要预先分配缓冲区,而不是NIO那种需要接收时才需要分配缓存,所以对连接数量非常大但流量小的情况,内存浪费很多

linux上aio不够成熟,处理回调的结果速度跟不到处理需求,供不应求,造成处理速度有瓶颈

相关推荐

淘宝店铺降级是什么意思?淘宝店铺降级了怎么恢复?
牛肚【中药】【中医百科】
www.bst365.com

牛肚【中药】【中医百科】

📅 07-22 👁️ 4194
聊一聊惠威m200mkiii+和哈曼卡顿水晶4的区别很小么?大家怎么选择哪个好?