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、定义共同的目标和KPI;2、建立定期沟通机制;3、协调营销和销售活动;4、共享客户数据与见解;5、实施跨部门培训。 营销团队需要与销售团队分享市场动态和客户洞察,搭建起对话桥梁。双…

    2023年11月27日
    46700
  • 如何提高项目规范管理质量

    项目规范管理质量的提高关键在于制定明确的项目管理标准、持续跟踪和评估项目进度、确保团队成员间的有效沟通、运用专业的项目管理工具以及进行定期的项目审计和复盘。首要的是制定明确的项目管理标准,它为项目的各个环节设立了清晰的指导原则和执行细则,有助于确保项目按预定的品质和要求进行,减少偏差和错误。 一、制…

    2024年4月10日
    4000
  • Mac上为什么下载不了VsCode

    在Mac上无法下载Visual Studio Code (VSCode)的原因可能包括:网络问题、Mac操作系统不兼容、浏览器问题、Apple安全设置等。特别地,Apple安全设置可能是一个比较常见的原因,因为Apple对其应用商店外的软件有严格的安全要求。苹果公司为了保护用户免受恶意软件的侵害,对…

    2024年4月3日
    7600
  • 有什么软件可以做计划

    可以做计划的软件有:1、微软To-Do;2、Todoist;3、Trello;4、Evernote;5、Google Keep;6、Microsoft Planner;7、OmniFocus;8、Wunderlist。 在日常生活和工作中,我们经常需要制定各种计划来帮助我们更好地完成任务和达成目标。…

    2023年3月2日
    75000
  • 为什么我的vscode没有提示

    Visual Studio Code(VSCode)作为一款高效、灵活的代码编辑器,受到广泛的欢迎。它提供了丰富的功能,包括但不限于代码自动完成功能,极大地提升了编程效率。如果你发现你的VSCode没有提示,可能的原因有几个:插件未安装或未启用、设置问题、文件类型不支持、插件冲突。其中,插件未安装或…

    2024年4月3日
    20500
  • vscode为什么不能编译的

    VSCode 本身不能直接编译代码的主要原因在于,VSCode 是一个轻量级的代码编辑器,而不是一个完整的集成开发环境(IDE)。VSCode 设计初衷是提供一个高度可定制的平台,以支持各种编程语言的代码编写、编辑和阅读,而不直接内置编译功能。 为了实现代码的编译,VSCode 依赖于外部工具和扩展…

    2024年4月3日
    7400
  • 研发项目的敏捷化管理

    研发项目敏捷化管理的关键在于快速响应变化、提升交付效率、确保产品质量和持续改进过程。这包括四个方面:1、短周期迭代,允许项目团队快速地对反馈进行响应和更改;2、跨功能协作,团队成员来自不同的职能领域,共同协作确保项目的多角度需求得到满足;3、客户参与度高,让客户深入参与产品开发过程中,以确保产品功能…

    2024年1月10日
    19000
  • 产品框架有哪些内容

    产品框架有哪些内容:1、最小可行产品;2、逆向工作;3、北极星框架;4、商业模式画布;5、待完成的工作等。其中,最小可行产品是指,强调了在开发新产品时学习的重要性。该策略也称为精益软件开发,首先要求开发最小(或准系统)产品以进行测试。 一、最小可行产品 这个框架归功于精益创业作者 Eric Reis…

    2023年4月17日
    54800
  • 研究院与项目团队之间如何管理

    研究院与项目团队之间的管理涉及到多个关键方面,如沟通机制、目标设定、任务分配、资源协调、风险控制等。这些方面共同构建了一套高效的协作框架,使得双方可以在追求科研创新与项目落地的过程中形成互补和协同。其中,沟通机制是构建双方良好合作的基石,它不仅能确保信息的及时传递,而且能够加深双方对项目目标和需求的…

    2024年4月11日
    3900
  • 天云数据CEO雷涛:迎接数智时代的正确姿势,是打造正确理解数智的认知体系

    雷涛  天云数据CEO 荣获国家级AI较高奖项:吴文俊人工智能科学技术发明奖。 2020年中关村高端领军人才获得者;首批CCF中国计算机学会大数据专委会委员;主导并参与汇丰银行、中国移动、中国联通、工商银行总部等多个亿级大型信息化项目规划建设。 文 |babayage 编辑 | 笑 笑 两年多求索,…

    2022年3月20日
    55600

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

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

分享本页
返回顶部