您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

BIO、NIO、AIO之间区别是什么?

时间:2023-03-08 14:32:09  来源:CSDN  作者:程序员小小刘

今天这是我在教室分享的一道面试题,怕忘记了自己花时间去研究了一下,看了大量的资料后整理的,不收藏你们就亏了哟。

面试题:BIO,NIO,AIO的区别?这是个网络编程的面试题:

在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。

同步

自己的理解:

 

也就是必须一件一件事做,等前一件做完了才能做下一件事 (提交请求->等待服务器处理->处理完返回 这个期间客户端浏览器不能干任何事 )

 

官方:

 

使用同步IO时,JAVA自己处理IO读写。
异步:
自己的理解:
请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕

 

官方:

 

使用异步IO时,Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS,完成后OS通知Java处理(回调)。
阻塞:
自己的理解:
阻塞就是说在煮水的过程中,你不可以去干其他的事情(性能和可靠性都不好)

 

官方:

 

使用阻塞IO时,Java调用会一直阻塞到读写完成才返回。
非阻塞:
自己的理解:
非阻塞就是在同样的情况下,可以同时去干其他的事情(对于低负载、低并发的应用程序)

 

官方:

 

使用非阻塞IO时,如果不能立马读写,Java调用会马上返回,当IO事件分发器通知可读写时在进行读写,不断循环直到读写完成。

 

IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。

传统的BIO(同步阻塞的BIO)

就是说服务端一旦接受客户端的连接,就可以建立通信套接字在这个通信套接字上进行读写操作,此时不能再接收其他客户端连接请求,只能等待同当前连接的客户端的操作执行完成,不过可以通过多线程来支持多个客户端的连接,循环导致高cpu消耗。

服务器的实现模式是一个连接一个线程,这样的模式很明显的一个缺陷是:

由于客户端连接数与服务器线程数成正比关系,可能造成不必要的线程开销,严重的还将导致服务器内存溢出。当然,这种情况可以通过线程池机制改善,但并不能从本质上消除这个弊端。

问题:当出现高并发怎么办?

解决这个问题就有了下面的。另外,更多面试资料,公众号Java精选,回复java面试,获取面试资料,支持在线刷题。

NIO(同步非阻塞的NIO)

从JDK1.4以后开始,JDK引入的新的IO模型NIO

 

  • Channel(通道):通道是双向的,可读也可写,而流的读写是单向的。无论读写,通道只能和Buffer交互。因为 Buffer,通道可以异步地读写。

  • Buffer(缓冲区):Buffer是一个对象,它包含一些要写入或者要读出的数据

  • Selector(选择器):选择器用于使用单个线程处理多个通道。因此,它需要较少的线程来处理这些通道。线程之间的切换对于操作系统来说是昂贵的。因此,为了提高系统效率选择器是有用的。

     

 

就是说加了三个功能来解决bio中的单线程一对多的问题

而服务器的实现模式是多个请求一个线程,即请求会注册到多路复用器Selector上,多路复用器轮询到连接有IO请求时才启动一个线程处理。

Java NIO: 单线程管理多个连接。

劣处:维护成本高,容易出现bug,项目大了之后消耗成本

AIO(异步非阻塞的AIO)

JDK1.7发布了NIO2.0也可以说是Nio的加强版,它是异步非阻塞的IO模型。

异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。

这就是真正意义上的异步非阻塞,服务器的实现模式为多个有效请求一个线程,客户端的IO请求都是由OS先完成再通知服务器应用去启动线程处理(回调)。

应用场景:并发连接数不多时采用BIO,因为它编程和调试都非常简单,但如果涉及到高并发的情况,应选择NIO或AIO,更好的建议是采用成熟的网络通信框架.NETty。

总结:理解了这,浓缩了还是有点东西的

 

  • BIO是一个连接一个线程。

  • NIO是一个请求一个线程。

  • IO是一个有效请求一个线程。

     

作者:程序员小小刘 https://blog.csdn.net/weixin_55604133/article/details/117048887


Tags:BIO   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
电脑启动故障排查:硬盘丢失、BIOS恢复失败,一篇文章帮你解决!
如果系统无法启动到Windows,可能是因为 BIOS 损坏,通常表现为No POST 或No Boot。系统的BIOS/UEFI 是硬件和软件之间的桥梁,因此如果系统无法启动,可能是 BIOS 出现故障。您可以...【详细内容】
2024-01-19  Search: BIO  点击:(54)  评论:(0)  加入收藏
BIOS设置详解:一项一项为你解读,让你轻松掌握BIOS设置!
Main 提供系统基本设置 Intel Adaptive Thermal Monitor(英特尔自适应热监控): 启用后,CPU可以根据当前的热量情况调整功率和性能,就像空调根据房间温度调节制冷一样,以保持温度...【详细内容】
2024-01-13  Search: BIO  点击:(104)  评论:(0)  加入收藏
BIOS设置:从入门到精通
一、BIOS的基础知识BIOS(Basic Input/Output System,基本输入输出系统)是计算机中最基础、最重要的程序。它是在计算机启动时加载的,为计算机硬件和操作系统提供了交互界面。通...【详细内容】
2023-12-29  Search: BIO  点击:(77)  评论:(0)  加入收藏
BIOS无法保存设置
近期,我们在读者中了解到有用户在BIOS设置过程中遇到了麻烦。当他在完成BIOS设置后,却发现设置无法保存。为此,他尝试了多种方法,但问题似乎仍然没有得到解决,这让他感到非常困扰...【详细内容】
2023-10-31  Search: BIO  点击:(358)  评论:(0)  加入收藏
设置、修改电脑BIOS密码的方式
一般的,电脑默认都是不含有BIOS密码的,可以直接在开机时不输入任何密码进入BIOS模式;而在某些特定的场合,我们可能需要对其加以密码的设置。也是在最近,我的电脑出了一些问题;在尝...【详细内容】
2023-10-17  Search: BIO  点击:(274)  评论:(0)  加入收藏
UEFI BIOS和传统BIOS有何区别,怎么进入?
BIOS如何设置?不少朋友在使用u盘重装系统时会遇到这个问题,需要进入BIOS当中设置优先从U盘启动。许多人对BIOS较为熟悉,它在过去的几十年中一直是主流,很多用户已经习惯了它,熟悉...【详细内容】
2023-10-12  Search: BIO  点击:(277)  评论:(0)  加入收藏
详细解析BIOS如何清除硬盘数据
在信息化社会中,数据安全问题越来越受到人们的重视。为了保护个人隐私和数据安全,使用BIOS清除硬盘数据是一种有效的方法。本文将围绕BIOS清除硬盘数据,介绍相关知识、步骤和注...【详细内容】
2023-10-07  Search: BIO  点击:(337)  评论:(0)  加入收藏
BIOS与CMOS的区别与作用
在计算机领域,我们经常听到关于BIOS和CMOS的术语,它们是电脑中重要的组成部分。然而,很多人对于BIOS和CMOS的概念和功能可能感到困惑。本文将向您介绍BIOS(Basic Input/Output S...【详细内容】
2023-07-05  Search: BIO  点击:(259)  评论:(0)  加入收藏
一把螺丝刀搞定笔记本 BIOS 密码,安全专家演示破解过程
IT之家 6 月 16 日消息,来自 CyberCX 的新西兰安全专家团队展示了一种方法,通过一把螺丝刀,短路 EEPROM 芯片引脚,就能轻松访问设有 BIOS 密码的笔记本。CyberCX 在几台已停产的...【详细内容】
2023-06-16  Search: BIO  点击:(334)  评论:(0)  加入收藏
BIOS增加显存大小的小妙招
现在很多人都喜欢自己鼓捣电子产品,动不动就喜欢进入BIOS,接下来就跟大家介绍一下BIOS增加显存的小方法。1、Video BlOs Cacheble:它的作用是决定是否将VGA BIOS和RAM缓冲指至...【详细内容】
2023-06-08  Search: BIO  点击:(230)  评论:(0)  加入收藏
▌简易百科推荐
Netflix 是如何管理 2.38 亿会员的
作者 | Surabhi Diwan译者 | 明知山策划 | TinaNetflix 高级软件工程师 Surabhi Diwan 在 2023 年旧金山 QCon 大会上发表了题为管理 Netflix 的 2.38 亿会员 的演讲。她在...【详细内容】
2024-04-08    InfoQ  Tags:Netflix   点击:(0)  评论:(0)  加入收藏
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(6)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(13)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(9)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(11)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(9)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
站内最新
站内热门
站内头条