当前位置: 首页 > news >正文

BIO AIO NIO 的区别

BIO AIO NIO Java 中用于 I/O 操作的三种不同的编程模型。它们的区别在于它们执行I/O 操作的方式和效率。在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。

同步与异步

同步:同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。

异步:异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。

同步和异步的区别最大在于异步的话调用者不需要等待处理结果,被调用者会通过回调等机制来通知调用者其返回结果。

阻塞和非阻塞

阻塞: 阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪才能继续。

非阻塞:非阻塞就是发起一个请求,调用者不用一直等着结果返回,可以先去干其他事情

1. BIO是同步阻塞I/O模型,它使用一个线程来处理一个请求,如果这个请求没有被处理完,这个线程就会一直等待,直到请求处理完成。这种模型适用于连接数较小的情况。

2. NIO是同步非阻塞I/O模型,它使用单个线程来处理多个请求,这些请求可以同时被这个线程处理,它通过轮询的方式来处理I/O请求,如果有I/O请求就处理,没有就继续轮询。这种模型适用于连接数较多但是连接时间短的情况。

3. AIO是异步非阻塞I/O模型,这种模型不需要为每个请求创建一个线程,由操作系统内部的线程来处理 I/O请求,同时它也具有非阻塞的特性,I/O请求不会一直等待,而是异步执行。这种模型适用于连接数很多的情况。

举个生活中简单的例子
你妈妈让你烧水,小时候你比较笨啊,在那里傻等着水开( 同步阻塞 )。
等你稍微再长大一点,你知道每次烧水的空隙可以去干点其他事,然后只需要时不时来看看水开了没有( 同步非阻塞 )。
后来,你们家用上了水开了会发出声音的壶,这样你就只需要听到响声后就知道水开了,在这期间你可以随便干自己的事情,你需要去倒水了(异步非阻塞 )。
http://www.lryc.cn/news/170115.html

相关文章:

  • 大数据学习1.1-Centos8网络配置
  • 在Android studio 创建Flutter项目运行出现问题总结
  • Ceph入门到精通-ceph对于长文件名如何处理
  • vue+element-ui 项目实战示例详解【目录】
  • 性能测试-性能调优主要方向和原则(15)
  • 关于taos数据库使用过程中突发“unable to establish connection”问题解决
  • 【Qt】Qt中将字符串转换为数字类型的函数总结以及用法示例
  • 效率工具3-计算机网络工具
  • 2万多条汉字笔画笔顺查询ACCESS\EXCEL数据库
  • 我的一周年创作纪念日,感谢有你们
  • 【音视频】ffplay源码解析-PacketQueue队列
  • C++ 霍夫变换圆形检测
  • ​南阳师范学院图书馆藏《​乡村振兴战略下传统村落文化旅游设计》许少辉八一新著——2023学生开学季辉少许
  • 如何将你在树莓派上部署的 IoT 物联网 MQTT 服务发布到公网?
  • 系统架构设计师(第二版)学习笔记----软件工程
  • C与C++字符串分割方法示例汇总
  • HTTP代理与VPN:网络代理技术的比较
  • 免费低代码平台,助企业高效管理任务
  • 基于conda的相关命令
  • 【微信小程序】swiper的使用
  • iText实战--PDF和iText 简介
  • 「大数据-0.1」虚拟机VMware安装、配置、使用、创建大数据集群教程
  • 【HTTP】GET 和 POST 的区别
  • Unity Asset Bundle Browser 工具
  • 使用Linkerd实现流量管理:学习如何使用Linkerd的路由规则来实现流量的动态控制
  • 1462. 课程表 IV
  • QTday2
  • thrift的简单使用
  • Python实现猎人猎物优化算法(HPO)优化随机森林分类模型(RandomForestClassifier算法)项目实战
  • 2023年7月京东平板电脑行业品牌销售排行榜(京东销售数据分析)