本文主要是介绍java中BIO、AIO与NIO的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、同步异步与阻塞非阻塞的区别
1.同步
例:买饭:自己亲自去饭馆买饭,这就是同步(自己处理IO读写)
2.异步
例:买饭:叫外卖送到家,这就是异步(IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS(饭名和地址),OS需要支持异步IO操作API)
3.阻塞
例:办理业务:一直排队等待(调用会一直阻塞到读写完成才返回)
4.非阻塞
例:办理业务:抽号后就可以做其他事,如果你等不急,可以去问工作人员到你了没,如果没到你就不能办理业务。(如果不能读写,调用会马上返回,当IO事件分发器会通知可读写时再继续进行读写,不断循环直到读写完成)
总之、同步、异步是目的,阻塞与非阻塞是实现手段!
二、BIO模型
同步阻塞
服务器实现模式:一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。
BIO图解:
三、NIO模型
同步非阻塞
服务器实现模式为一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
NIO图解:
四、AIO模型
异步非阻塞
服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,
注:AIO又称为NIO2.0,在JDK7才开始支持。
AIO流程图
五、BIO、伪异步、NIO和AIO模型的比较
这里写图片描述
参考链接
详细解释
这篇关于java中BIO、AIO与NIO的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!