IO 和 NIO 有什么区别?

embedded/2025/3/1 17:52:36/

文章目录

  • 阻塞模式与非阻塞模式
  • 数据处理方式
  • 通信模型
  • 应用场景

阻塞模式与非阻塞模式

IO:是阻塞式的 IO 操作。在传统的 IO 中,当一个线程执行读操作或者写操作时,该线程会被阻塞,直到操作完成。例如,在从文件读取数据时,线程会一直等待数据读取完毕,在这期间线程不能做其他事情。

NIO:是非阻塞式的。NIO 允许线程在执行 IO 操作时,如果没有数据可读或者可写,线程不会被阻塞,而是可以去执行其他任务,之后再回来检查 IO 操作是否完成。

数据处理方式

IO:基于流(Stream)进行操作,数据是按顺序、一个字节一个字节或者一个字符一个字符地从流中读取或写入。比如通过InputStream从网络连接中读取数据,每次只能读取一个字节或一个字节数组的数据,处理大规模数据时效率可能较低。

NIO:基于缓冲区(Buffer)和通道(Channel)进行操作。数据先被读取到缓冲区中,然后可以从缓冲区中获取数据进行处理,写入时也是先将数据放入缓冲区,再由缓冲区写入到目标通道。缓冲区本质上是一块内存区域,它提供了更灵活的数据处理方式,能提高数据读写的效率。

通信模型

IO:通常使用阻塞式的通信模型,每个连接都需要一个独立的线程来处理,当并发连接数增多时,会创建大量的线程,这会消耗大量的系统资源,包括内存和 CPU 时间片,并且线程之间的上下文切换也会带来额外的开销,从而限制了系统的并发处理能力。

NIO:采用了基于选择器(Selector)的多路复用通信模型。通过一个选择器可以同时管理多个通道的 IO 事件,只需要少量的线程就可以处理大量的连接。当有 IO 事件发生时,选择器会通知相应的线程去处理,大大提高了系统的并发处理能力,减少了资源的消耗。

应用场景

IO:适用于简单的、对性能要求不高、并发量较小的应用场景,比如一些小型的单机应用,或者对实时性要求不高的批处理任务等。

NIO:适用于高并发、高性能的应用场景,如大型的网络服务器、即时通讯应用、大规模数据处理系统等,能够更好地利用系统资源,提高应用的性能和响应能力。


http://www.ppmy.cn/embedded/169108.html

相关文章

视频字幕识别和翻译

下载的视频很多不是汉语的,我们需要用剪映将语音识别出来作为字幕压制到视频中去。 剪映6.0以后语音识别需要收费,但是低版本还是没有问题。 如果想要非汉语字幕转成中文,剪映低版本不提供这样功能。但是,用剪映导出识别字幕&am…

基于单片机的机床切屑运输系统设计

摘 要 中国2011年大约产生了1亿1570万吨的废铁屑,而2011年中国的铁屑消费量约为1亿2250万吨[1]。回收的切屑除了熔块再加工外,其自身的强还原性也经常被工厂用于含磷、含铬污水的处理以及铅、锰等物质的提取。近年切屑被回收后的利用率极高。但切屑的收…

Nginx负载均衡策略详解:从轮询到智能分发,打造高可用服务架构

Nginx负载均衡策略详解:从轮询到智能分发,打造高可用服务架构 一、负载均衡的核心价值 当单台服务器无法承载高并发流量时,负载均衡通过将请求分发到多台服务器,实现: 横向扩展:突破单机性能瓶颈故障隔离…

PDF图形识别:一键框选,快速计数,开启数字化图形处理新时代

PDF图形识别技术基于先进的图像识别算法和人工智能技术。当对PDF文件进行处理时,首先会将PDF中的图形转化为计算机可识别的数字图像格式。接着,算法通过对图像中线条、形状、颜色等特征的分析,来识别图形的类别和属性。例如,对于工…

C++-第十七章:包装器

目录 第一节:std::function 第二节:std::bind 2-1.基本介绍 2-2.调整顺序(不常用) 2-3.调整个数 2-4.std::bind与std::function 下期预告: C中有3种可调用对象:函数指针、仿函数对象、lambda函数,经过包装器包装后屏…

【AutoSar CP】SoAd模块

【AutoSar CP】SoAd模块 文章目录 【AutoSar CP】SoAd模块1. SoAd总体说明1.1. SoAd在AutoSar CP中的层级关系1.2. SoAd的作用2. 主要配置参数3. Sock连接4. PDU传输5. PDU接收6. 配置参数详表SoAdBswModulesSoAdGeneralSoAdConfigSoAdSocketConnectionGroupSoAdSocketConnecti…

【Qt】为程序增加闪退crash报告日志

背景 随着软件代码量的增加,软件崩溃闪退的肯能行越来越大,其中一些是难以复现的,比如访问了访问了非法地址、被操作系统杀死等。 为此,在软件出现闪退情况时,尽可能多的记录闪退发生时信息,对排查闪退原…

MySQL 和 PostgreSQL 的详细对比

以下是 MySQL 和 PostgreSQL 的详细对比,帮助您根据需求选择合适的数据库: 1. 核心特性对比 特性MySQLPostgreSQL数据库类型关系型数据库 (RDBMS)关系型数据库 (RDBMS),支持部分 NoSQL 特性SQL 标准兼容性部分兼容(简化语法&…