Java 中 BIO、NIO、AIO 有什么区别

区别是:BIO是同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。NIO是一种同步非阻塞的I/O模型,在Java 1.4 中引入了NIO框架,对应 java.nio 包,提供了 Channel , Selector,Buffer等抽象。AIO 也就是 NIO 2。在 Java 7 中引入了 NIO 的改进版 NIO 2,它是异步非阻塞的IO模型。

Java 中 BIO、NIO、AIO 有什么区别-Worktile社区

BIO (Blocking I/O)

同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。

采用线程池和任务队列可以实现一种叫做伪异步的 I/O 通信框架,它的模型图如上图所示。当有新的客户端接入时,将客户端的 Socket 封装成一个Task(该任务实现java.lang.Runnable接口)投递到后端的线程池中进行处理,JDK 的线程池维护一个消息队列和 N 个活跃线程,对消息队列中的任务进行处理。由于线程池可以设置消息队列的大小和最大线程数,因此,它的资源占用是可控的,无论多少个客户端并发访问,都不会导致资源的耗尽和宕机。

伪异步I/O通信框架采用了线程池实现,因此避免了为每个请求都创建一个独立线程造成的线程资源耗尽问题。不过因为它的底层任然是同步阻塞的BIO模型,因此无法从根本上解决问题。

NIO (New I/O)

NIO是一种同步非阻塞的I/O模型,在Java 1.4 中引入了NIO框架,对应 java.nio 包,提供了 Channel , Selector,Buffer等抽象。

NIO中的N可以理解为Non-blocking,不单纯是New。它支持面向缓冲的,基于通道的I/O操作方法。 NIO提供了与传统BIO模型中的 Socket 和 ServerSocket 相对应的 SocketChannel 和 ServerSocketChannel 两种不同的套接字通道实现,两种通道都支持阻塞和非阻塞两种模式。阻塞模式使用就像传统中的支持一样,比较简单,但是性能和可靠性都不好;非阻塞模式正好与之相反。对于低负载、低并发的应用程序,可以使用同步阻塞I/O来提升开发速率和更好的维护性;对于高负载、高并发的(网络)应用,应使用 NIO 的非阻塞模式来开发。

AIO (Asynchronous I/O)

AIO 也就是 NIO 2。在 Java 7 中引入了 NIO 的改进版 NIO 2,它是异步非阻塞的IO模型。异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。

AIO 是异步IO的缩写,虽然 NIO 在网络操作中,提供了非阻塞的方法,但是 NIO 的 IO 行为还是同步的。对于 NIO 来说,我们的业务线程是在 IO 操作准备好时,得到通知,接着就由这个线程自行进行 IO 操作,IO操作本身是同步的。

延伸阅读:

什么是Java?

Java具有大部分编程语言所共有的一些特征,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的形式和感觉,但它要比C++语言更易于使用,而且在编程时彻底采用了一种以对象为导向的方式。

Java是一种编程语言,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的“形式和感觉”,但它要比C++语言更易于使用,而且在编程时彻底采用了一种“以对象为导向”的方式。

使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的服务器端和客户端运行。另外,Java还可以被用来编写容量很小的应用程序模块或者applet,做为网页的一部分使用。applet可使网页使用者和网页之间进行交互式操作。

Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1x版发展到1.2版。常用的Java平台基于Java1.8,最近版本为Java19。

文章标题:Java 中 BIO、NIO、AIO 有什么区别,发布者:小编,转载请注明出处:https://worktile.com/kb/p/38156

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年2月14日 下午8:10
下一篇 2023年2月14日 下午8:14

相关推荐

  • 网络的带宽和信道的带宽有什么区别与联系

    区别是:1、表示的对象不同2、计算的方法不同3、单位不同4、作用不同。信道带宽表示信道能够达到的最大数据速率;信道包括模拟信道和数字信道。信号带宽表示信号频谱图可以观察到一个信号所包含的频率成分。 1、表示的对象不同 信道带宽表示信道能够达到的最大数据速率;信道包括模拟信道和数字信道。在模拟信道,带…

    2023年2月15日
    1.3K00
  • oa系统综合办公

    标题:OA系统综合办公 办公自动化(OA)系统转变了传统的办公模式,提高了工作效率。办公自动化系统的核心优势包括:1、业务流程标准化与自动化;2、信息资源共享与协同;3、管理决策的支持性功能;4、远程办公的便捷化。其中,业务流程标准化与自动化首要目的是通过电子流程来替代传统的纸质工作流,减少手工操作…

    2024年1月15日
    18500
  • 有什么免费的办公oa软件

    免费的办公oa软件有:1、点晴办公oa系统;2、Teamface企典办公oa系统;3、钉钉办公oa系统;4、企业微信办公oa系统;5、飞书办公oa系统。点晴OA办公系统是一个完全永久免费的OA办公系统,不限使用时间、不限用户数、不限功能。 1、点晴办公oa系统 点晴OA办公系统是一个完全永久免费的O…

    2023年5月28日
    1.3K00
  • 资源管理策略包括哪些

    资源管理策略包括:一、人力资源管理;二、资金管理;三、项目管理;四、设备管理;五、信息管理;六、时间管理。人力资源管理是资源管理策略中的一个重要方面。它包括招聘、培训、绩效评估、激励措施和离职等方面。 一、人力资源管理 人力资源管理是资源管理策略中的一个重要方面。它包括招聘、培训、绩效评估、激励措施…

    2023年4月30日
    1.1K00
  • 软件项目计划模板怎么写

    软件项目计划模板需要包含以下内容:1. 项目概述;2. 项目管理;3. 风险管理;4. 项目进度管理;5. 项目质量管理;6. 项目资源管理;7. 项目沟通管理。在项目计划模板中,项目概述应该包括项目的名称、目标、范围、时间表和预算等基本信息。 1. 项目概述 在项目计划模板中,项目概述应该包括项目…

    2023年2月28日
    43000
  • 半导体oa

    标题: 半导体行业的全面分析 摘要: 半导体行业是当今世界高科技产业的核心,其发展态势对全球经济格局和科技进步具有深远影响。1、技术创新推进力量:行业持续繁荣很大程度上得益于不断的技术创新,比如摩尔定律的推动下微芯片的不断迭代更新。2、供应链的重要性与脆弱性并存:近年来,全球事件对供应链的冲击显现了…

    2024年1月11日
    14700
  • 项目管理如何催进度

    项目管理催进度要做到:一、合理配置资源;二、动员和激励机制;三、良好的自我管理。进度计划是围绕工期目标确定的。项目经理不要去尝试探讨工期目标的合理性,而是要把精力放在目标的可行性上。 一、合理配置资源 进度计划是围绕工期目标确定的。近年来,国家要求合理化工期、合理化报价。但就工期而言,一定是不合理的…

    2023年3月22日
    46500
  • PMP项目管理过程和阶段的区别

    区别有:1、定义和分类不同;2、内容焦点不同;3、应用时机不同;4、参与者角色变化;5、工具与技术不同;6、输出产物差异。其中,定义和分类不同指的是,项目管理过程是针对项目任务进行的一系列活动,而阶段是项目从启动到结束的时间段划分。 1、定义和分类不同 PMP项目管理过程:基于PMBOK指南中的五大…

    2023年7月30日
    61900
  • 如何为企业选择合适的ERP模块

    在选择合适的ERP模块时,企业应该直接考量成本效益分析、业务流程匹配、系统集成能力、可扩展性和供应商支持。系统地进行成本效益分析是判断ERP投资回报的直观方式。业务流程匹配是确保ERP模块与企业现有流程融合的关键,以实现业务效率的最大化。系统集成能力指ERP模块如何与现有系统互联互通,维护信息的完整…

    2023年11月27日
    19000
  • 如何进行知识库的内容迁移:实用技巧

    进行知识库的内容迁移的技巧:1、制定明确的迁移计划;2、评估目标平台的兼容性;3、数据清理和优化;4、导入和迁移数据;5、迁移后的验证和测试;6、制定培训计划;7、持续监控和优化;知识库内容的迁移是在不同平台、系统或存储方式之间转移信息的过程。这可能涉及从一个知识库系统迁移到另一个,或者将知识库内容从本地服务器迁移到云端。

    2023年11月16日
    29200

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部