NIO与AIO

2024-03-27 07:52
文章标签 nio aio

本文主要是介绍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 作为底层的核心。

这篇关于NIO与AIO的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/851414

相关文章

【虚拟化】AIO主机安装PVE8,配置网络,安装win11(virtio,qcow2,scsi,oobe,adk)

【虚拟化】AIO主机安装PVE8,配置网络,安装win11(virtio,qcow2,scsi,oobe,adk) 文章目录 1、ESXI vs PVE,AIO主机系统二选一2、PVE网络配置(DNS,换源,网卡,https,概览)3、win11虚拟化配置(virtio,raw,qcow2)附,域名解析,rocky9.4,黑群晖 1、ESXI vs PVE,AIO主机系统二选

还不懂BIO,NIO,AIO吗

BIO(Blocking I/O)、NIO(Non-blocking I/O)和 AIO(Asynchronous I/O)是 Java 中三种不同的 I/O 模型,主要用于处理输入 / 输出操作。 一、BIO(Blocking I/O) 定义与工作原理: BIO 即阻塞式 I/O(同步阻塞,传统IO)。在这种模型下,当一个线程发起一个 I/O 操作(如读取文件或网络数据)时,此线

JAVA NIO的笔记

Java中的NIO IO-文件的读写 NIO是Java4开始提供的用来解决IO问题的API。 Channel(通道)  Buffer(缓存区)  Selector(选择器) inputStream outPutStream 都是以Stream为观点看的 所以input为读 output为写 两个对象文件盒stream Channel读写操作都能做 Channel是执行读写操作这个工作的东西 而读写

Java高级特性增强-NIO

GitHub:https://github.com/wangzhiwubigdata/God-Of-BigData 关注公众号,内推,面试,资源下载,关注更多大数据技术~大数据成神之路~预计更新500+篇文章,已经更新50+篇~ **Java高级特性增强-NIO 本部分网络上有大量的资源可以参考,在这里做了部分整理并做了部分勘误,感谢前辈的付出,每

Java - NIO之Channel(FileChannel)

一、关于Channel     Java NIO的通道(Channel)类似流,但又有些不同:         既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。         通道可以异步地读写。         通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。       Java NIO中最重要的通道的实现:

Error:Artifact com.*******:war exploded: java.nio.file.InvalidPathException: Illeg

由于一次电脑蓝屏,Idea启动tomcat报错: Error:Artifact ':war exploded’: java.nio.file.InvalidPathException: Illegal char < > at index 71: K:\COMPANY_CODE_IDEA\FLOW_CODE*\target\activ : Illegal char < > at index 71:

Java 输入与输出之 NIO.2【AIO】【Path、Paths、Files】【walkFileTree接口】探索之【三】

在JDK 1.7 版本中对NIO进行了完善,推出了NIO.2,也称为AIO(异步IO),在处理大量并发请求时具有优势,特别是在网络编程和高并发场景下,表现得更为出色。 对于输出流和输入流而言,操作的对象可以是文件,大多数情况下是文件,也可以是网络连接,当然也可以是内存数据。我们今天主要讨论的是文件和目录处理。 本博客我们将探讨NIO.2中最基础的Path、Paths和Files的用法。 Path

Java NIO 核心知识总结

Java NIO 核心知识总结 NIO简介 在传统的I/O模型中,是以阻塞的方式进行的也就是当一个线程执行的时候线程会一直阻塞到完成工作为止。这种模型的缺点就是在并发比较大的时候性能就会比较低,并且在每次都要给一个新的任务(连接)创建一个新的线程,这个新的线程的创建和从上一个切换到这一个线程都会都性能有影响。 为了优化这个传统的io模型,在jdk1.4新引入了一个全新的new io包,在原有

Linux实现异步IO的方法:epoll,posix aio,libaio,io_uring

Linux中异步IO的实现方式大概有以下几种: 1. epoll 熟悉网络编程的人可能会想到select,poll,epoll这些异步IO的方式,但实际上这些方式叫做非阻塞IO,用于把网络读写的阻塞变成非阻塞,并不是实际意义上的异步IO。因此Epoll这些只能用于实现非阻塞的Socket IO,无法用于异步的Storage IO。 因为只有网络IO才存在阻塞的情况(也即,这个网络文件描述符是否

Java程序员从笨鸟到菜鸟(四十三)NIO 非阻塞实现高并发

一、阻塞和非阻塞 阻塞:应用程序在获取网络数据的时候,如果网络传输很慢,就会一直等待直到传输完毕为止 非阻塞:应用程序可以直接获取已经准备就序好的数据,无需等待 二、BIO、NIO、AIO BIO(同步阻塞式 IO):服务器实现模式为一个请求一个线程,客户端有连接请求是服务器就需要启动一个线程进行处理,如果这个连接不做任何事情就造成不必要的开销 NIO(同步非阻塞式IO):服务器实现模式