一文讲清 AIO BIO NIO的区别

news/2025/2/21 8:04:39

引言

在 Java 编程中,BIO(Blocking I/O)、NIO(Non-blocking I/O)和 AIO(Asynchronous I/O)是三种不同的 I/O 模型,它们在处理输入输出操作时有着不同的机制和特点,但是市面上大部分都是文字讲解不够深刻,本篇文章力求讲清楚他们三者的区别

BIO同步阻塞

BIO(Blocking-IO)即同步阻塞模型,这也是最初的IO模型,也就是当调用内核的read()函数后,内核在执行数据准备、复制阶段的IO操作时,应用线程都是阻塞的,所以本次IO操作则被称为同步阻塞式IO,如下:

  

当程序中需要进行IO操作时,会先调用内核提供的read()函数,但在之前分析过IO的工作原理,IO会经过“设备→内核缓冲区→程序缓冲区”这个过程,该过程必然是耗时的,在同步阻塞模型中,程序中的线程发起IO调用后,会一直挂起等待,直至数据成功拷贝至程序缓冲区才会继续往下执行。

NIO非阻塞式 I/O

非阻塞式 I/O,是 Java 1.4 引入的新 I/O 模型。它基于通道(Channel)和缓冲区(Buffer)进行操作,线程在进行 I/O 操作时,如果没有数据可用或无法立即完成操作,不会被阻塞,而是可以继续执行其他任务。通过选择器(Selector)可以实现一个线程管理多个通道的 I/O 操作。

当应用程序中发起IO调用后,内核并不阻塞当前线程,而是立马返回一个“数据未就绪”的信息给应用程序,而应用程序这边则一直反复轮询去问内核:数据有没有准备好?直到最终数据准备好了之后,内核返回“数据已就绪”状态,紧接着再由进程去处理数据

AIO 异步 I/O

即异步 I/O,是 Java 7 引入的异步 I/O 模型。在 AIO 中,当进行 I/O 操作时,线程不会等待操作完成,而是在操作完成后会通过回调函数或 Future 对象通知线程。线程在发起 I/O 操作后可以继续执行其他任务,从而实现真正的异步处理。

 在AIO模型中,同样会基于信号驱动实现,在最开始会先调用aio_read、sigaction函数,然后用户进程中会创建出一个信号处理程序,同时用户进程可立马返回执行其他操作,在数据写入到内核、且从内核拷贝到用户缓冲区后,内核会通知对应的用户进程对数据进行处理。


http://www.niftyadmin.cn/n/5860507.html

相关文章

JavaScript系列(77)-- Web Components 深入解析

JavaScript Web Components 深入解析 🧩 Web Components 是一套用于创建可重用用户界面组件的技术标准集合。今天让我们深入探讨这项强大的原生技术,学习如何创建真正封装的、可重用的组件。 Web Components 概述 🌟 💡 小知识&…

【Dubbo+Zookeeper】——SpringBoot+Dubbo+Zookeeper知识整合

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大二学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL&#xff0…

scrapy pipelines过滤重复数据

scrapy pipelines过滤重复数据 方法 1:基于内存的简单去重(适合小规模数据)方法 2:基于持久化存储去重(适合大规模数据/重启恢复)方法 3:使用 Scrapy 内置的 dupefilter(针对请求去重…

硬件岗位是否适合你?

在当今科技飞速发展的时代,硬件行业作为技术创新的基石,始终扮演着至关重要的角色。无论是智能手机、自动驾驶汽车,还是人工智能服务器,硬件都是这些技术的核心支撑。然而,硬件岗位是否适合你?作为一名硬件专家,我将从多个角度为你分析,帮助你判断自己是否适合从事硬件…

react实例与总结(二)

目录 一、脚手架基础语法(16~17) 1.1、hello react 1.2、组件样式隔离(样式模块化) 1.3、react插件 二、React Router v5 2.1、react-router-dom相关API 2.1.1、内置组件 2.1.1.1、BrowserRouter 2.1.1.2、HashRouter 2.1.1.3、Route 2.1.1.4、Redirect 2.1.1.5、L…

IC卡、M1卡及各类卡的原理使用说明

1. M1卡 1.1 M1卡说明 请参考:https://blog.csdn.net/dancehole/article/details/126868829 1.2 M1卡测试 M1卡的0扇区是只读扇区,我们可以测试下读写,我们向0扇区写入数据,返回失败,读取数据,数据如下…

详解Nginx 配置

一、Nginx 介绍 Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器及电子邮件(IMAP/POP3)代理服务器。它由俄罗斯的程序设计师 Igor Sysoev 所开发,自 2004 年发布以来,凭借其高性能、低内存消耗、高并发处理能力等特点&#xf…

k8s ssl 漏洞修复

针对Kubernetes集群中SSL/TLS协议信息泄露漏洞(CVE-2016-2183)的修复,需重点修改涉及弱加密算法的组件配置。以下是具体修复步骤及验证方法: 一、漏洞修复步骤 1. 修复etcd服务 修改配置文件 : 编辑 /etc/kubernetes/…