当前位置:网站首页>如何理解BIO、NIO、AIO的区别
如何理解BIO、NIO、AIO的区别
2022-08-10 09:15:00 【黄泥川水猴子】
一、同步阻塞I/O(BIO):
同步阻塞I/O,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制来改善。BIO方式适用于连接数目比较小且固定的架构,这种方式对服务端资源要求比较高,并发局限于应用中,在jdk1.4以前是唯一的io现在,但程序直观简单易理解
二、同步非阻塞I/O(NIO):
同步非阻塞I/O,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有IO请求时才启动一个线程进行处理。NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,jdk1,4开始支持
三、异步非阻塞I/O(AIO):
异步非阻塞I/O,服务器实现模式为一个有效请求一个线程,客户端的IO请求都是由操作系统先完成了再通知服务器用其启动线程进行处理。AIO方式适用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,jdk1.7开始支持。
四、IO与NIO区别:
IO面向流,NIO面向缓冲区
IO的各种流是阻塞的,NIO是非阻塞模式
Java NIO的选择允许一个单独的线程来监视多个输入通道,可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入或选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道
五、同步与异步的区别:
同步:发送一个请求,等待返回,再发送下一个请求,同步可以避免出现死锁,脏读的发生
异步:发送一个请求,不等待返回,随时可以再发送下一个请求,可以提高效率,保证并发
同步异步关注点在于消息通信机制,
阻塞与非阻塞关注的是程序在等待调用结果时(消息、返回值)的状态:
阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程
AIO与NIO的实际区别是什么
例子讲解
海底捞很好吃,但是经常要排队。我们就以生活中的这个例子进行讲解。
- A顾客去吃海底捞,就这样干坐着等了一小时,然后才开始吃火锅。(BIO)
- B顾客去吃海底捞,他一看要等挺久,于是去逛商场,每次逛一会就跑回来看有没有排到他。于是他最后既购了物,又吃上海底捞了。(NIO)
- C顾客去吃海底捞,由于他是高级会员,所以店长说,你去商场随便玩吧,等下有位置,我立马打电话给你。于是C顾客不用干坐着等,也不用每过一会儿就跑回来看有没有等到,最后也吃上了海底捞(AIO)
哪种方式更有效率呢?是不是一目了然呢?
边栏推荐
- 以技术御风险,护航云原生 | 同创永益 X 博云举办产品联合发布会
- The implementation of the seemingly useless component (text gradient) in NaiveUI is so simple
- 2022年固定资产管理系统的概况
- J9数字科普:Web 3.0 是关于数据所有权还是去中心化?
- UE4 粒子特效基础学习 (01-将粒子效果挂载到角色身上)
- Pieces of TensorFlow 2.9 (1)
- 并发的基本概念,操作,容器
- [Metaverse Omi Says] See how UCOUCO integrates performance art into the Metaverse
- J9数字论:关于DAO 特点的宏观分析
- js读取excel时间格式转换
猜你喜欢

【FAQ】【Push Kit】推送服务,回执配置一直报错、回执过期修改、怎么删除配置的回执

It is obvious that a unique index is added, why does it still generate duplicate data?

Vivado时序约束中Tcl命令的对象及属性

【API架构】REST API 行业辩论:OData vs GraphQL vs ORDS

速卖通卖家如何抓住产品搜索权重

【企业架构】敏捷与企业架构:战略联盟

FPGA时钟篇(三) MRCC和SRCC的区别

ARM Architecture 2: Processor Core and Assembly Instruction Set

12 【其它组合式API】

DAY25:逻辑漏洞
随机推荐
【数据仓库】什么是 Azure Synapse,它与 Azure Data Bricks 有何不同?
怎么使用【jmeter正则表达式提取器】解决返回值作参数的问题
How to break the DeepFake face-changing scam?turn him over
ARM Architecture 3: Addressing and Exception Handling of ARM Instructions
不要把公司当成家,被通知裁员时会变得不幸...
FPGA时钟篇(一) 7系列的时钟结构
JVM探究
Question brushing tool h
js-----数组转换成树形结构
shell之函数和数组
郭晶晶家的象棋私教,好家伙是个机器人
keepalived:双主配置
iwemeta metaverse: Ali's first COO: how to build a sales force
I don't want to do accounting anymore, Die changed to a new one, moved forward bravely, and finally successfully passed the career change test to double his monthly salary~
Mongo的简单操作-数据库用户的查询、创建与删除
[OAuth2] Nineteen, OpenID Connect dynamic client registration
[Data Architecture] Distributed Data Grid as a Solution for Centralized Data Monolith
【REST架构】OData、JsonAPI、GraphQL 有什么区别?
Guys, may I ask, the oraclecdc error report is not serialized, but I see that the source code does not inherit serialization, what is the reason?
keepalived:常见问题