首页 > 编程语言 > 详细

java基础 - BIO、NIO、AIO 有什么区别?

时间:2020-08-30 09:19:36      阅读:85      评论:0      收藏:0      [点我收藏+]

总结

BIO

同步并阻塞

线程发起IO请求,不管内核是否准备好IO操作,从发起请求起,线程一直阻塞,直到操作完成。

NIO

同步非阻塞(由于最后依然要本线程去操作,因此是“同步”;由于是立即返回,因此是“非阻塞”)

线程发起IO请求,立即返回;操作系统在做好IO操作的准备之后,通过调用注册的回调函数通知线程做IO操作,线程开始阻塞,直到操作完成。

在Reactor模式中,事件分离者等待某个事件或者可应用或个操作的状态发生(比如文件描述符可读写,或者是socket可读写),事件分离器就把这个事件传给事先注册的处理器(事件处理函数或者回调函数),由后者来做实际的读写操作。

AIO

异步非阻塞(由于是操作系统的线程在做IO操作,完成后再通知用户线程,因此是“异步”;由于是立即返回,因此是“非阻塞”)

线程发起IO请求,立即返回;操作系统做好IO操作的准备之后,由操作系统起一个线程去做IO操作,直到操作完成或者失败;再通过调用注册的回调函数通知用户线程做IO操作完成或者失败的后续操作。

在Proactor模式中,事件处理者(或者代由事件分离者发起)直接发起一个异步读写操作(相当于请求),而实际的工作是由操作系统来完成的。发起时,需要提供的参数包括用于存放读到数据的缓存区,读的数据大小,或者用于存放外发数据的缓存区,以及这个请求完后的回调函数等信息。事件分离者得知了这个请求,它默默等待这个请求的完成,然后转发完成事件给相应的事件处理者或者回调。

参考

两种高效的服务器设计模型:Reactor和Proactor模型

BIO,NIO,AIO的区别

java基础 - BIO、NIO、AIO 有什么区别?

原文:https://www.cnblogs.com/frankcui/p/13584092.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!