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

news/2024/9/24 23:53:59/

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.ppmy.cn/news/1503581.html

相关文章

java~反射

反射 使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码) 原理图 加载完类后,在堆中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对…

Kotlin中的Any 类详解

Kotlin 中的 ANY 类详解 在 Kotlin 中,Any 类是 Kotlin 类继承层次结构的根。每个 Kotlin 类都继承自 Any。它等同于 Java 中的 Object,但有一些关键差异和额外的功能。 Kotlin 中 Any 的关键点 继承: Kotlin 中的每个类都直接或间接地继承自…

嵌入式C++、ROS 、OpenCV、SLAM 算法和路径规划算法:自主导航的移动机器人流程设计(代码示例)

在当今科技迅速发展的背景下,嵌入式自主移动机器人以其广泛的应用前景和技术挑战吸引了越来越多的研究者和开发者。本文将详细介绍一个嵌入式自主移动机器人项目,涵盖其硬件与软件系统设计、代码实现及项目总结,并提供相关参考文献。 项目概…

Android 10.0 Launcher 启动流程

在前面SystemUI启动流程中说到,在SystemServer中会去启动各种系统服务,这里的launcher也是启动的其中一个服务ActivityManagerService去启动的。在android10之前,系统四大组件的启动都是在ActivityManagerService中,在android10中…

【Cadence19】如何由PCB导出symbol器件PCB封装

建议将封装导出到新文件夹命名Temp 【注意】需要提醒的是:Cadence文件夹命名不要有中文!!!

Python面试题:结合Python技术,如何使用Scrapy构建爬虫框架

Scrapy 是一个强大的 Python 爬虫框架,适用于大规模的网页数据抓取。它提供了许多内置的功能来简化爬虫开发。下面我们介绍如何使用 Scrapy 构建爬虫框架,包括安装、创建项目、定义爬虫和数据提取等步骤。 安装 Scrapy 首先,确保你已经安装…

百度Go实习复盘

1.键入url渲染页面的过程 2.TCP三次握手是怎样实现的?为什么需要三次握手? 3.四次挥手呢? 4.MySQL的事务 5.事务的回滚是如何实现的? 6.MySQL的索引的适用范围 7.在MySQL中如何使用索引? 8.如何查询语句的索引情…

第五章:神经网络

目录 5.1神经元模型 5.2感知机与多层网络 5.3 误差逆传播算法 5.4 全局最小与局部极小 5.5 其他常见神经网络 5.6 深度学习 5.1神经元模型 "神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作…