服务器之家

服务器之家 > 正文

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

时间:2021-07-28 11:52     来源/作者:罗啦啦

最近一直在准备面试,为了使自己的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的区别详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部