当前位置:网站首页>如何理解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)
哪种方式更有效率呢?是不是一目了然呢?
边栏推荐
猜你喜欢
FPGA中BEL Site Tile FSR SLR分别指什么?
多线程浅谈
[System Design] S3 Object Storage
Flink部署 完整使用 (第三章)
How AliExpress sellers seize product search weight
Flink快速上手 完整使用 (第二章)
08 【Props 组件事件】
凭借这份阿里架构师的万字面试手册,逆风翻盘,斩获阿里offer
【数据仓库】什么是 Azure Synapse,它与 Azure Data Bricks 有何不同?
CAD to WPF: Tips on converting CAD drawing files to WPF vector code files (xaml files)
随机推荐
Pieces of TensorFlow 2.9 (1)
It is obvious that a unique index is added, why does it still generate duplicate data?
FPGA时钟篇(一) 7系列的时钟结构
Spotify使用C4模型表达其架构设计
硬件工程师90天学习资料及笔记汇总
DAY25:逻辑漏洞复现
【搜索引擎】Solr:提高批量索引的性能
[OAuth2] 20. OAuth2 Extended Protocol PKCE
封装和使用通用的工具栏组件
Defending risks with technology and escorting cloud native | Tongchuang Yongyi X Boyun held a joint product launch conference
[OAuth2] Nineteen, OpenID Connect dynamic client registration
MUDA:对齐特定域的分布和分类器以实现来自多源域的跨域分类
日期类(暑假每日一题 19)
亚信AntDB数据库有啥业务应用场景和应用案例?
打工人的第27天-平凡但不平淡的日子
以技术御风险,护航云原生 | 同创永益 X 博云举办产品联合发布会
【FAQ】【Push Kit】推送服务,回执配置一直报错、回执过期修改、怎么删除配置的回执
速卖通卖家如何抓住产品搜索权重
07 【动态组件 组件注册】
Oracle rac所在的网络要割接,停掉其中一个rac节点,这种方案可行吗?