Java中三种I/O模型 BIO,NIO,AIO

news2024/9/20 9:28:19

UNIX 系统下, IO 模型一共有 5 种: 同步阻塞 I/O同步非阻塞 I/OI/O 多路复用信号驱动 I/O 和异步 I/O

这也是我们经常提到的 5 种 IO 模型

(1)同步阻塞I/O模型

 

 应用程序发起read调用后,一直处于阻塞状态

内核开始准备数据,直到把数据拷贝到应用程序,应用程序才被唤醒

(2)同步非阻塞 IO 模型

 应用程序会一直发起 read 调用,避免了一直阻塞

直到数据就绪了,应用程序再次发起调用的时候,应用程序才进入阻塞状态,当数据拷贝完成,应用程序才被唤醒

相比于同步阻塞 IO 模型,同步非阻塞 IO 模型确实有了很大改进。通过不断发起read调用,避免了一直阻塞

但是,这种 IO 模型同样存在问题:应用程序不断进行 I/O 系统调用轮询数据是否已经准备好的过程是十分消耗 CPU 资源的

这个时候,I/O 多路复用模型 就上场了

(3)I/O 多路复用模型 

 线程首先发起 select 调用,询问内核数据是否准备就绪,等内核把数据准备好了,内核给应用程序发送一个ready信号,此时应用程序发起read调用,应用程序进入阻塞状态,等数据拷贝完应用程序被唤醒

IO 多路复用模型,通过减少无效的系统调用,减少了对 CPU 资源的消耗

(4)异步I/O

 应用程序进行read调用后,会直接返回,不会阻塞在那里

当内核拷贝完数据后,通知应用程序

Java中有三种I/O模型 BIO,NIO,AIO

1.BIO Blocking I/O

BIO属于同步阻塞I/O模型

当应用程序不多的时候,没问题,但是当面对十万甚至百万级连接的时候,传统的 BIO 模型是无能为力的。因此,我们需要一种更高效的 I/O 处理模型来应对更高的并发量。

2.NIO (Non-blocking   I/O)

 对于高负载、高并发的(网络)应用,应使用 NIO

NIO中有一个非常重要的选择器 ( Selector ) 的概念,也可以被称为 多路复用器。通过它,只需要一个线程便可以管理多个客户端连接。当客户端数据到了之后,才会为其服务

3. AIO (Asynchronous I/O)

它是异步 IO 模型

目前来说 AIO 的应用还不是很广泛。Netty 之前也尝试使用过 AIO,不过又放弃了。这是因为,Netty 使用了 AIO 之后,在 Linux 系统上的性能并没有多少提升。

总结:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68318.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BP综述:自闭症中基于功能连接体的预测模型

自闭症是一种异质性的神经发育疾病,基于功能磁共振成像的研究有助于推进我们对其对大脑网络活动影响的理解。我们回顾了使用功能连接和症状的测量的预测建模如何帮助揭示对这种情况的关键见解。我们讨论了不同的预测框架如何进一步加深我们对复杂自闭症症状学基础的…

Word处理控件Aspose.Words功能演示:在 Python 中将 Word DOCX 或 DOC 转换为 PDF

Word 到PDF是最流行和执行最广泛的文档转换之一。DOCX或DOC文件在打印或共享之前会转换为 PDF 格式。在本文中,我们将在 Python 中自动将 Word 转换为 PDF。步骤和代码示例将演示如何使用 Python 将 Word DOCX 或 DOC 转换为 PDF。此外,您将了解自定义 W…

Stable Diffusion模型阅读笔记

Stable Diffusion模型 什么是Stable Diffusion模型 一般而言,扩散是在图像中反复添加小且随机的噪声。与之相反,Stable Diffusion模型是一种将噪声生成为图像的机器学习模型。经过训练,它可逐步对随机高斯噪声进行去噪以获得感兴趣的样本&a…

Apache Hop Transforms Samples【持续完善中】

Samples transforms 1、abort-basic.hpl 根据筛选器行转换的结果中止此管道 第一步:添加Data grid转换,Meta部分维护字段。 Data部分维护数据,如下图。 第二步:添加filter rows,如下图 按照如下截图进行修改: 第三步:添加Abort 第四步:执行截图如下:

[附源码]Python计算机毕业设计Django学生综合数据分析系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Golang 【basic_leaming】fmt.Print, fmt.Printf, fmt.Println 的区别

阅读目录fmt 包fmt.Print 原样输出fmt.Printf 格式输出fmt.Println 值 空格 输出换行输出Println 和 Print 区别Println 和 Printf 区别变量类型推导方式定义变量使用 Printf打印一个变量的类型fmt 包 fmt format,是一种格式化输出函数汇总包,用于格式…

这款国产API工具也太强了吧!让我放弃了postman

为什么弃用postman转用Eolink? 程序员在接口开发完成后都通常需要自测,当返回结果根据符合预期时,则表示代表接口可用。自己以前用的是postman来进行接口测试,但postman只能进行接口测试,有局限性、很多场景不能满足我的需求&am…

jenkins集成sonarqube

一、在linux上面安装sonarqube 相关文件下载地址 (1)下载sonarqube-9.6.1.59531.zip解压 (2)创建用户 useradd sonar passwd sonar(3)赋权 chown -R sonar.sonar /opt/sonarqube/sonarqube-9.6.1.59531(4)切换用户&#xff0c…

【C++】C++11新特性

目录 一.列表初始化initializer_list 1.什么是列表初始化 2.列表初始化的原理 二.auto/decltype/nullptr 1.auto - 自动类型推导 2.decltype - 指定类型 3.nullptr - C空指针 三.范围for 四.右值引用/移动构造/移动赋值/万能引用/完美转发 1.什么是右值 2.左值与右值…

react面试题总结一波,以备不时之需

React组件的构造函数有什么作用?它是必须的吗? 构造函数主要用于两个目的: 通过将对象分配给this.state来初始化本地状态将事件处理程序方法绑定到实例上 所以,当在React class中需要设置state的初始值或者绑定事件时&#xff…

首版20年后开源反病毒引擎 ClamAV 1.0 发布

导读ClamAV 是一个开源的(GPL)反病毒引擎,用于检测木马、病毒、恶意软件和其他恶意威胁。它为用户提供了许多实用程序,包括一个可扩展的多线程守护程序、一个命令行扫描器和一个自动更新数据库的高级工具。 ClamAV 是一个开源的&a…

rust编译器教我做人,为啥还要学习rust语言,因为想使用rust做一些底层服务,更深入的研究技术。

目录1,继续学习Rust语言,确实学习成本很高,学了两周还在学习入门概念,和编译器斗争2,rust学习曲线非常高,为啥还要坚持学习,一直想写一些服务研究研究底层的技术啥的3,rust对前端也有…

git回退版本 简单易懂

进行git版本回退的时候 查看git提交的版本 使用git log查看提交日志: git loggit log命令显示从最近到最远的提交日志 如果嫌输出信息太多,可以试试加上–prettyoneline参数,代码如下: $ git log --prettyoneline 日志会进行减少 根据…

【分布式系统】分布式缓存Redis集群原理与环境搭建

文章目录集群原理缓存分片算法Hash算法一致性Hash算法二者区别集群方案通信协议缓存路由缓存扩展保障可用性搭建redis安装步骤集群安装基本配置启动节点创建集群访问集群添加主节点加入集群分配槽添加从节点切换从节点删除节点手动切换故障升级节点问题记录安装gccjemalloc/jem…

3.21 小红书薯条改版了,都改了些什么呢?【玩赚小红书】

一、薯条是什么? 咱们在座的大部分都是小红书深度用户,相信对薯条再熟悉不过了。 「薯条」 就是小红书自助式的投放工具,通过投放薯条,能给我们提供更多的曝光度,带来更多的赞藏评,从而提高内容的转化率&…

通信原理 | 彻底搞懂卷积

先从多项式运算说起 下面这个多项式,大家应该都会算: 一般做法是先逐项相乘,再合并同类项,需要两步才能完成,那有没有一步就能完成的方法呢? 下面的方法就可以做到 总结这种计算过程: 反褶:多项式按照x的降幂排列,将其中任意一个多项式各项按照升幂排列。 平移:将…

加拿大学生服务部门都有哪些?

咱们今天来聊聊和同学们密切相关的大学里的学生服务部门都有哪些?同学们有了各种问题可以去找谁解决?知道了这些团队,同学们远在千里上着网课,就不会有孤立无援的感觉啦。 1. Registrition Office 这是负责新生注册管理的部门。大…

(附源码)ssm在线学习系统 毕业设计 261624

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

安装阿里的龙蜥系统

1.打开VMware workstations 点击文件 选择新建虚拟机 2.选择虚拟机类型的配置 3.如何安装操作系统 4.选择操作系统的版本 5.修改虚拟机名称和位置 6.设置指定磁盘的容量 默认20G 7.检查新建虚拟机所有参数检查选择的所有参数是否有误,没问题就点完成&#xff0…

java面试强基(19)

HashMap 和 Hashtable 的区别? 线程是否安全: HashMap 是非线程安全的,Hashtable 是线程安全的,因为 Hashtable 内部的方法基本都经过synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!&am…