NIO、BIO、AIO介绍

目前有三种IO共存。分别是BIO、NIO和AIO。

BIO 全称Block-IO 是一种同步且阻塞的通信模式。是一个比较传统的通信方式,模式简单,使用方便。但并发处理能力低,通信耗时,依赖网速。(线程发起io请求后,一直阻塞(阻塞io),直到数据就绪后,用户线程将数据写入socket空间,或从socket空间读取数据)

 

NIO,全程 Non-Block IO ,一种非阻塞同步的通信模式。

(线程发起io请求后,立即返回(非阻塞io)。用户线程不阻塞等待,但是,用户线程要定时轮询检查数据是否就绪,当数据就绪后,用户线程将数据从用户空间写入socket空间,或从socket空间读取数据到用户空间(同步))

(IO多路复用(NIO):上述NIO实现中,需要用户线程定时轮训,去检查IO数据是否就绪,占用应用程序线程资源。IO多路复用模型中,将检查IO数据是否就绪的任务,交给系统级别的select或poll模型,由系统进行监控,减轻用户线程负担。)

原来的 I/O 以流的方式处理数据,而 NIO 以块的方式处理数据。

 

AIO,全程 Asynchronous IO,是异步非阻塞的IO。是一种非阻塞异步的通信模式。

(线程发起io请求后,立即返回(非阻塞io),当数据读写完成后,OS通知用户线程(异步)。这里数据写入socket空间,或从socket空间读取数据到用户空间由OS完成,用户线程无需介入,所以也就不会阻塞用户线程,即异步。)

在NIO的基础上引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现。

AIO基于时间驱动思想,采用proactor模式。数据完成后,由os主动通知应用程序,通过epoll实现,节省了NIO中selector循环遍历检测数据就绪的资源开销

 

三种IO的区别

BIO (Blocking I/O):同步阻塞I/O模式。

NIO (New I/O):同步非阻塞模式。

AIO (Asynchronous I/O):异步非阻塞I/O模型。

那么,同步阻塞、同步非阻塞、异步非阻塞都是怎么回事呢?下面我们用一篇烧开水的例子给大家稍作解释。

同步阻塞模式:开始烧水,并坐在水壶面前一直等着水烧开。

同步非阻塞模式:开始烧水,但是不一直坐在水壶前面等,而是干别的事情,然后每隔几分钟看一下水有没有烧开。

异步非阻塞I/O模型:开始烧水,我们不坐在水壶前面等,也不隔几分钟去看一下,而是等水烧开之后声响通知我。

阻塞VS非阻塞:人是否坐在水壶前面一直等。(是否一直等待任务结束)

同步VS异步:是不是水烧开之后主动通知人(是不是会回调通知)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章