欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浅谈Java中BIO、NIO和AIO的区别和应用场景

程序员文章站 2023-12-17 22:40:04
最近一直在准备面试,为了使自己的java水平更上一个档次,拜读了李林峰老师的《netty权威指南》,了解了java关于io的发展和最新的技术,真是受益匪浅,现在把我总结的关...

最近一直在准备面试,为了使自己的java水平更上一个档次,拜读了李林峰老师的《netty权威指南》,了解了java关于io的发展和最新的技术,真是受益匪浅,现在把我总结的关于bio、nio和aio的区别和应用场景概述一遍。

在此之前,先弄清几个概念:

1.同步:使用同步io时,java自己处理io读写。

2.异步:使用异步io时,java将io读写委托给os处理,需要将数据缓冲区地址和大小传给os,完成后os通知java处理(回调)。

3.阻塞:使用阻塞io时,java调用会一直阻塞到读写完成才返回。

4.非阻塞:使用非阻塞io时,如果不能立马读写,java调用会马上返回,当io事件分发器通知可读写时在进行读写,不断循环直到读写完成。

下面是重点了(敲黑板!)!

1.bio:同步并阻塞,服务器的实现模式是一个连接一个线程,这样的模式很明显的一个缺陷是:由于客户端连接数与服务器线程数成正比关系,可能造成不必要的线程开销,严重的还将导致服务器内存溢出。当然,这种情况可以通过线程池机制改善,但并不能从本质上消除这个弊端。

2.nio:在jdk1.4以前,java的io模型一直是bio,但从jdk1.4开始,jdk引入的新的io模型nio,它是同步非阻塞的。而服务器的实现模式是多个请求一个线程,即请求会注册到多路复用器selector上,多路复用器轮询到连接有io请求时才启动一个线程处理。

3.aio:jdk1.7发布了nio2.0,这就是真正意义上的异步非阻塞,服务器的实现模式为多个有效请求一个线程,客户端的io请求都是由os先完成再通知服务器应用去启动线程处理(回调)。

应用场景:并发连接数不多时采用bio,因为它编程和调试都非常简单,但如果涉及到高并发的情况,应选择nio或aio,更好的建议是采用成熟的网络通信框架netty。

以上所述是小编给大家介绍的java中bio、nio和aio的区别详解整合,希望对大家有所帮助

上一篇:

下一篇: