BIO、NIO、AIO 网络通信区别

BIO 为阻塞式通信,主要性能消耗在开启新线程负责客户端的链接,该线程会一直等待直到客户端数据发送完,中间可能因为网速问题,文件太大 等,造成该线程长期处于等待状态,浪费该线程的开销。如下图:

bio.png

NIO为非阻塞通信,基于事件通知机制。当有客户端请求时,会先把客户端的数据存储到系统缓存,等数据发送完毕,程序再开启一个线程去系统缓存拉去数据或者对数据其他处理 (如文件数据直接存入硬盘,是零拷贝数据不进入程序内 )效率高。
下图可以粗略理解一下,一个客户端请求的事件通知,

nio.png

AIO为 NIO2.0 版本,JDK1.7后才有,完全异步非阻塞通信。

总结:

一、 BIO和NIO不同:本质就是阻塞和非阻塞的区别
  • 阻塞:应用程序在获取客户端的网络数据时候,如果网络传输数据很慢,那服务端的线程就一直等待数据传输完毕。
  • 非阻塞:应用程序直接可以获取已经准备好的数据(存在系统缓存中),无需等待。
  • BIO为同步阻塞机制,NIO为同步非阻塞机制。NIO并没有实现异步,在JDK1.7后,NIO支持异步非阻塞机制,即NIO2.0 (AIO)
二、 同步和异步不同:指操作系统与应用程序对IO的操作不同
  • 同步:应用程序直接参与IO的读写操作,应用程序直接阻塞到某个方法上,直到数据准备就绪;或者采用轮询事件通知的机制检查数据是否就绪,如果就绪就读取数据。
  • 异步:所有的IO读写操作都交给操作系统处理,与我们的应用程序没有直接关系,应用程序不关心IO读写,当操作系统完成IO读写操作时,会给我们的应用程序发通知,程序直接拿走数据即可。

同步指的是server服务器
阻塞指的是具体的技术(BIO/NIO)
*对AIO的封装,即是 Netty *

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,492评论 11 349
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,983评论 19 139
  • NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也...
    闪电是只猫阅读 8,360评论 0 7
  • 总有那么一天 我们回望从前 流年已经走远 而你还在身边
    傩咪阅读 937评论 0 1
  • 森林里的“最佳情侣” 从前,有一片大森林,里面住着好多可爱的小动物,有可爱的小白兔,智慧的长颈鹿,呆萌的大灰狼,秀...
    思兹念兹阅读 4,200评论 5 1

友情链接更多精彩内容