NIO与AIO

NIO与AIO

NIO模型

在 LInux 环境中,java.nio.channels.Selector 的子类叫做 sun.nio.ch.EPollSelectorImpl ,其底 层是基于 Epoll 模型去实现的 IO 多路复用器。

对于 Epoll 模型 我们需要了解到它底层的三个函数

在 JDK 实现的底层中,EPollSelectorImpl 在初次创建的时候,会调用 create 函数去内存块中 开辟一块空间。然后再调用 ctl 方法,往这个内存块中创建一颗红黑树,并且将 socket 对象插 入到树上。然后再调用 wait 方法,让出 CPU。

整体的执行过程如下图所示:

AIO模型

AIO(Asynchronous I/O)

  • AIO是Java 1.7引入的,它提供了更高级别的异步I/O操作。
  • AIO的主要特点是在进行I/O操作时不需要阻塞线程,当I/O操作完成后会通过回调函数通知程序,从而实现异步处理。
  • 相比于NIO,AIO更加方便,因为它把I/O操作的处理逻辑封装到了回调函数中,程序员不需要手动管理缓冲区和通道。

为什么 Netty 没有使用 AIO 而是采用 NIO 的思路去进行设计?

创始人在GitHub中的回答

翻译:

不比unix系统上的NIO(epoll)快(这是真的)

没有daragram支持

不必要的线程模型(过多的抽象而没有使用)

总而言之,可以理解为,在 Unix 系统上 AIO 性能综合表现不如 NIO 好,所以 Netty 使用了 NIO 作为底层的核心。

相关推荐
Full Stack Developme3 天前
java.nio 包详解
java·python·nio
编啊编程啊程10 天前
【004】生菜阅读平台
java·spring boot·spring cloud·dubbo·nio
编啊编程啊程10 天前
兼职管理平台
java·spring boot·rpc·dubbo·nio
编程岁月12 天前
java面试-0136-BIO、NIO、AIO区别?
java·面试·nio
TitosZhang14 天前
BIO、NIO、AIO详解
java·redis·nio
编啊编程啊程16 天前
gRPC从0到1系列【20】
java·rpc·kafka·dubbo·nio
编啊编程啊程17 天前
gRPC从0到1系列【19】
java·spring boot·rpc·dubbo·nio
失散1318 天前
分布式专题——26 BIO、NIO编程与直接内存、零拷贝深入辨析
java·分布式·rpc·架构·nio·零拷贝
Yeats_Liao22 天前
Java网络编程(七):NIO实战构建高性能Socket服务器
java·网络·nio
编啊编程啊程22 天前
gRPC从0到1系列【6】
java·rpc·kafka·dubbo·nio