NIO与AIO

NIO与AIO

NIO模型

2024-03-26T13:34:50-wljrvr.png

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

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

2024-03-26T13:20:39-mswtop.png

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

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

2024-03-26T13:49:14-niqxih.png

AIO模型

AIO(Asynchronous I/O)

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

2024-03-26T13:50:04-oyfgms.png

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

创始人在GitHub中的回答

2024-03-26T13:57:06-vnznob.png

翻译:
不比unix系统上的NIO(epoll)快(这是真的)
没有daragram支持
不必要的线程模型(过多的抽象而没有使用)

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

相关推荐

  1. <span style='color:red;'>NIO</span><span style='color:red;'>与</span><span style='color:red;'>AIO</span>

    NIOAIO

    2024-03-27 10:06:06      15 阅读
  2. NIO BIO AIO详解

    2024-03-27 10:06:06       11 阅读
  3. BIO,NIO,AIO

    2024-03-27 10:06:06       6 阅读
  4. BIO、NIOAIO 的区别

    2024-03-27 10:06:06       36 阅读
  5. NIOBIO

    2024-03-27 10:06:06       11 阅读
  6. 面试官:BIO、NIOAIO的区别

    2024-03-27 10:06:06       39 阅读
  7. BIO、NIOAIO 有什么区别?

    2024-03-27 10:06:06       39 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-27 10:06:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-27 10:06:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-27 10:06:06       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-27 10:06:06       20 阅读

热门阅读

  1. Element Plus快速入门及常用组件

    2024-03-27 10:06:06       16 阅读
  2. 北航2023年考研机试题

    2024-03-27 10:06:06       16 阅读
  3. centOS 安装MySQL8.0

    2024-03-27 10:06:06       20 阅读
  4. Spring Boot的作用

    2024-03-27 10:06:06       17 阅读
  5. ChatGPT革新:打造高质量学术论文

    2024-03-27 10:06:06       24 阅读
  6. HTTP和HTTPS的区别

    2024-03-27 10:06:06       19 阅读
  7. ChatGPT之道:AI与编程的完美融合

    2024-03-27 10:06:06       18 阅读
  8. 软件工程---软件设计模式和软件体系结构

    2024-03-27 10:06:06       15 阅读
  9. Node.js 的常用命令详解

    2024-03-27 10:06:06       19 阅读
  10. 一些常用的Node.js命令

    2024-03-27 10:06:06       20 阅读
  11. PHP记录日志

    2024-03-27 10:06:06       15 阅读
  12. vue响应式基础

    2024-03-27 10:06:06       15 阅读
  13. Netty空闲检测&Keepalive

    2024-03-27 10:06:06       17 阅读