为什么Netty底层不使用AIO

AIO明显性能要优于NIO

我们知道,AIO是异步非阻塞,NIO是同步非阻塞,单看性能而言,的确是AIO要比NIO更胜一筹。
相信大家也有像我一样的疑惑,那为什么AIO优于NIO,Netty底层不使用AIO呢?接下来我们看下这几个原因

Netty底层使用NIO的原因

  1. NIO中将多路请求注册到多路选择复用器上,线程轮询请求状态,发现线程完毕则分配线程进行处理业务逻辑;而AIO是每个请求从一开始就分配一个线程,实现了真正的异步处理。但是这也会带来一个问题,线程池中线程的数量不是无限的,如果每个请求从一开始就分配线程进行处理,很快就会用完线程。
    这就好比NIO相当于餐做好了自己去取,AIO相当于送餐上门。要吃饭的人是百万,千万级的,送餐员也就几百人。所以一般要吃到饭,是自己去取快呢,还是等着送的更快?目前的外卖流程不是很完善,所以时间上没想的那么靠谱,但是有优化空间

2.NIO相当于餐做好了自己去取,AIO相当于送餐上门。要吃饭的人是百万,千万级的,送餐员也就几百人。所以一般要吃到饭,是自己去取快呢,还是等着送的更快?目前的外卖流程不是很完善,所以时间上没想的那么靠谱,但是有优化空间,这就是AIO
2. Netty整体架构是reactor模型, 而AIO是proactor模型, 混合在一起会非常混乱,把AIO也改造成reactor模型看起来是把epoll绕个弯又绕回来
3. 在Linux系统上,AIO的底层实现仍使用EPOLL,与NIO相同,因此在性能上没有明显的优势;Windows的AIO底层实现良好,但是Netty开发人员并没有把Windows作为主要使用平台考虑

你可能感兴趣的:(Netty)