每天一个知识点(七)Java中BIO、NIO、AIO 有什么区别?

简介: BIO即同步阻塞IO,实现模型为一个连接就需要一个线程去处理。这种方式简单来说就是当有客户端来请求服务器时,服务器就会开启一个线程去处理这个请求,即使这个请求不干任何事情,这个线程都一直处于阻塞状态。

微信搜索《Java鱼仔》,每天一个知识点不错过


(一)每天一个知识点


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


(二)结论


同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。


BIO即同步阻塞IO,实现模型为一个连接就需要一个线程去处理。这种方式简单来说就是当有客户端来请求服务器时,服务器就会开启一个线程去处理这个请求,即使这个请求不干任何事情,这个线程都一直处于阻塞状态。


BIO模型有很多缺点,最大的缺点就是资源的浪费。想象一下如果QQ使用BIO模型,当有一个人上线时就需要一个线程,即使这个人不聊天,这个线程也一直被占用,那再多的服务器资源都不管用


NIO使用了多路复用器机制,以socket使用来说,多路复用器通过不断轮询各个连接的状态,只有在socket有流可读或者可写时,应用程序才需要去处理它,在线程的使用上,就不需要一个连接就必须使用一个处理线程了,而是只是有效请求时(确实需要进行I/O处理时),才会使用一个线程去处理,这样就避免了BIO模型下大量线程处于阻塞等待状态的情景。


AIO是在JDK1.7中推出的新的IO方式--异步非阻塞IO,也被称为NIO2.0,AIO在进行读写操作时,直接调用API的read和write方法即可,这两种均是异步的方法,且完成后会主动调用回调函数。简单来讲,当有流可该取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序;对于写操作而言,当保作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。


(三)再多学一点


有关Java中BIO、NIO和AIO,我专门写过一篇博客,大家可以看一下:

https://link.juejin.cn/?target=https%3A%2F%2Fblog.csdn.net%2Fqq_41973594%2Farticle%2Fdetails%2F104943131



相关文章
|
4天前
|
存储 监控 Java
Java中的NIO编程实践精华
Java中的NIO编程实践精华
|
5天前
|
Java
Java NIO Selector
Java NIO Selector
5 0
|
6天前
|
存储 监控 Java
深入探索Java BIO与NIO输入输出模型:基于文件复制和socket通信
深入探索Java BIO与NIO输入输出模型:基于文件复制和socket通信
|
6天前
|
存储 监控 Java
了解Java中的NIO编程
了解Java中的NIO编程
|
7天前
|
Java 机器人 程序员
Java中的文件I/O操作:流、读写和NIO详解
Java中的文件I/O操作:流、读写和NIO详解
|
7天前
|
Java 机器人 大数据
如何在Java中进行网络编程:Socket与NIO
如何在Java中进行网络编程:Socket与NIO
|
8天前
|
Java API 开发者
Java中的文件I/O操作:流、读写和NIO详解
Java中的文件I/O操作:流、读写和NIO详解
|
18天前
|
Java 视频直播 数据库连接
Java I/O 模型详解:BIO、NIO 与 AIO 的特性与应用
Java I/O 模型详解:BIO、NIO 与 AIO 的特性与应用
20 2
|
算法 Java
JAVA并发处理经验(四)并行模式与算法7:AIO网络编程
一、前言 我们已经学习了NIO是网络操作,提供了选择器selector阻塞操作,但是比较还是IO同步的。
856 0
|
1天前
|
并行计算 Java 大数据
Java中的高效并行计算与多线程编程技术
Java中的高效并行计算与多线程编程技术