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

相关推荐

  • 电子办公oa是什么意思

    电子办公oa即办公自动化,是将计算机、通信等现代化技术运用到传统办公方式,进而形成的一种新型办公方式。办公自动化利用现代化设备和信息化技术,代替办公人员传统的部分手动或重复性业务活动,优质而高效地处理办公事务和业务信息。 办公自动化(Office Automation,简称OA),是将计算机、通信等…

    2023年5月28日
    200
  • 为什么Java不支持操作符重载

    原因是:1、Java的简单性和清晰性;2、避免编程错误;3、JVM复杂性;4、让开发工具处理更容易。。添加运算符重载比没有它肯定会使设计更复杂,并且它可能导致更复杂的编译器,或减慢JVM,它需要做额外的工作来识别运算符的实际含义,并减少优化的机会。 1、Java的简单性和清晰性 清晰性是Java设计…

    2023年2月22日
    2400
  • 原生app开发的优缺点是什么

    原生开发(Native App开发),是在Android、IOS等移动平台上利用提供的开发语言、开发类库、开发工具进行App软件开发。比如Android是利用Java、Eclipse、Android studio;IOS是利用Objective-C 和Xcode进行开发。 一、优点 1、可访问手机所…

    2023年5月31日
    600
  • sql与关系代数的联系和区别

    SQL和关系代数都是用于管理关系型数据库的语言。区别有:一、表达能力;二、语法;三、应用范围;四、性能。SQL具有更强的表达能力,可以支持更多的操作和功能。关系代数相对来说比SQL受限,只能支持基本的关系操作。 SQL和关系代数都是用于管理关系型数据库的语言,它们有许多相似之处,但是它们也有一些重要…

    2023年5月30日
    1100
  • 敏捷看板有哪些好处

    敏捷看板的好处包括以下几点:1、看板卡可轻松检测低效率;2、看板卡有助于及时交付;3、看板卡⿎励团队之间的协作。在敏捷方法中,看板(Kanban)是一个动态的管理工具,可以显示项目中每项工作的流动性,并且可以识别瓶颈。

    2022年11月16日
    17900
  • xp系统和win7系统区别是什么

    xp系统和win7系统区别有以下几方面:任务栏和资源管理器对于Windows XP老用户而言,乍看Windows 7的任务栏,真的有点乱,比如缩略图预览功能、快速启动栏及牛宽的任务栏横条,但如果你使用电脑不多,或非常追求使用美感还是赶紧装上去看看吧。 1、任务栏和资源管理器对于Windows XP老…

    2023年2月21日
    15700
  • Java析构方法是什么

    构造方法负责创建一个Java的类对象,并可以对该对象进行初始化。与此相对应的,其实还有一个方法,可以负责对象的销毁,这个负责对象销毁的方法,就叫做析构方法。在Java中,有一个专门的析构方法,即finalize()方法! 构造方法负责创建一个Java的类对象,并可以对该对象进行初始化。与此相对应的,…

    2023年5月28日
    300
  • c++引用的内存地址为什么就是变量的地址

    在C++中,引用的内存地址就是被引用变量的地址,因为引用只是一个别名,它不占用独立的内存空间。当我们定义一个引用时,编译器会将其视为被引用变量的另一个名称,并且引用和被引用变量共享相同的内存地址。这就是为什么C++引用的内存地址就是变量的地址的原因。 C++中的引用是一种特殊的指针类型,它允许我们通…

    2023年2月28日
    4600
  • 跟进多个项目进度怎么做

    跟进多个项目进度的策略:1、了解如何运行单个项目;2、制定计划;3、确定优先项目;4、不要分心;5、定期开会;6、根据需求使用正确的工具等。了解如何运行单个项目很重要,如果不知道如何先有效地运行一个项目,就不能一次运行多个项目。 1、了解如何运行单个项目 如果你是项目管理的新手,你需要明白,如果不知…

    2023年4月6日
    4000
  • erp管理软件有哪些

    常见的erp管理软件有:1、易仓ERP;2、通途ERP;3、芒果店长;4、ASINKING。易仓ERP是一款为大卖家量身定做的ERP产品。 在其官网和对外的传播资料中,一直强调其ERP产品用户多为月销百万美金的卖家,易仓具有11年跨境软件研发经验 ,拥有业内最大开发团队 。

    2022年12月31日
    4800

发表回复

登录后才能评论
联系我们
站长微信
站长微信
分享本页
返回顶部