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

Java中的BIO,NIO与操作系统IO模型的区分

Java中的IO模型

Java中的BIO,NIO,AIO概念可以是针对输入输出流,文件,和网络编程等其他IO操作的。
但是主要还是在网络编程通信过程中比较重要,因为很多情况网络编程需要它们来提供更好的性能。
所以本篇文章偏向于网络编程中的BIO,NIO。
在Java中
BIO即Blocaking IO,同步阻塞IO
NIO即Non-Blocking IO,同步非阻塞IO
AIO即Asynchronous IO,异步IO
这里的AIO由于使用实现困难。目前应用并不广泛。在系统性能要求较高时,NIO即可满足需求,且具有更简单的实现。

与操作系统IO模型的概念区分

上一篇文章就是操作系统中的IO模型,有五种。阻塞,非阻塞,多路复用,异步,信号驱动IO
这里就要注意了。
Java里的BIONIO不就是阻塞IO和非阻塞IO吗?这样不是概念重合了吗?
其实不是的。
对于BIO与操作系统中的阻塞IO概念确实基本一致,对于连接与线程是一对一的关系,连接不做事线程就会阻塞。
但是NIO却不一样,Java的NIO,准确来说是非阻塞的IO多路复用模型。实际上对应的是操作系统IO模型中多路复用的实现。而非阻塞则是多路复用的基础,二者并不是互斥的关系。
之前的Java NIO文章说过。NIO使用ChannelSelectorBuffer,来进行网络通信。
其中的Selector就是实现多路复用的组件。使用上就是把Channel及对应想监听的事件注册到Selector上,通过单个线程调用Selector.select()来监听多个注册到其上面的Channel的事件。有事件发生就停止阻塞状态,返回发生的事件数,通过SelectedKeys遍历发生的事件进行处理。
再想想操作系统中的IO多路复用,不都是一个进程或者线程来监听多个IO事件吗。
当然多路复用的具体实现在LInux上有select,poll,epoll这三种。Java NIO在Linux系统上使用的就是epoll机制。

结语

NIO的概念与IO模型中的非阻塞IO虽然名字都是非阻塞,但是实际上Java NIO是多路复用的。
我觉得可能有人分不清,所以写了一下。
最近再学RPC怎么写。

后面可能出一篇Netty的线程模型。三种多路复用实现。

感谢阅读,如有错漏,烦请批评指正

http://www.lryc.cn/news/412239.html

相关文章:

  • AI砸掉了这些人的饭碗
  • 端口及对应服务
  • 剑指offer题解合集——Week7day1[滑动窗口的最大值]
  • 深入解读财报,开启美股投资之旅
  • 邦芒支招:成功找到工作要掌握的3个知识点
  • Educational Codeforces Round 168 (Rated for Div. 2)-7.30复盘
  • Web开发:小结Apache Echarts官网上常用的配置项(前端可视化图表)
  • B树的平衡性与性能优化
  • llama3源码解读之推理-infer
  • 【教程】Linux安装Redis步骤记录
  • 全球汽车线控制动系统市场规模预测:未来六年CAGR为17.3%
  • Ubuntu运行深度学习代码,代码随机epoch中断没有任何报错
  • 只有4%知道的Linux,看了你也能上手Ubuntu桌面系统,Ubuntu简易设置,源更新,root密码,远程服务...
  • Tomcat部署——个人笔记
  • 常见且重要的用户体验原则
  • web基础及nginx搭建
  • C++ 布隆过滤器
  • 使用HTML创建用户注册表单
  • Python零基础入门教程
  • 成为git砖家(10): 根据文件内容生成SHA-1
  • 园区导航小程序:一站式解决园区导航问题,释放存储,优化访客体验
  • 对于n进制转十进制的解法及代码(干货!)
  • 当代互联网打工人的生存现状,看完泪流满面!
  • 花几千上万学习Java,真没必要!(三十八)
  • Zilliz 2025届校园招聘正式启动,寻找向量数据库内核开发工程师
  • TwinCAT3 新建项目教程
  • 大模型算法面试题(十九)
  • 应用地址信息获取新技巧:Xinstall来助力
  • 图的最短路径算法:Dijkstra、Floyd-Warshall、Bellman-Ford
  • Camera的pipline(TODO)