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 作为底层的核心。

相关推荐
xu_ws5 天前
redis的io多路复用和Java NIO的区别
java·redis·nio
苍煜7 天前
Java开发IO零基础吃透:BIO、NIO、同步异步、阻塞非阻塞
java·python·nio
身如柳絮随风扬19 天前
深入理解Java IO与NIO的区别:从BIO到NIO的演进
java·nio
白晨并不是很能熬夜20 天前
【PRC】第 2 篇:Netty 通信层 — NIO 模型 + 自定义协议 + 心跳
java·开发语言·后端·面试·rpc·php·nio
笨手笨脚の20 天前
详解五种IO模型
nio·bio·aio·io模型
JackSparrow41422 天前
彻底理解Java NIO(一)C语言实现 单进程+多进程+多线程 阻塞式I/O 服务器详解
java·linux·c语言·网络·后端·tcp/ip·nio
杨凯凡25 天前
【019】IO/NIO 概念:Web 开发要掌握到什么程度
java·开发语言·nio
佛祖让我来巡山1 个月前
Netty入门|从BIO到Netty:一步步看懂Java网络编程的迭代逻辑
netty·nio·bio
devilnumber1 个月前
java的NIO框架Netty、Mina、Grizzly 和 Jetty 四种对比
java·nio·java面试·jetty
四斤年华1 个月前
关于SpringBoot在MultipartFile上java.nio.file.NoSuchFileException: /tmp/undertow
java·spring boot·nio