bio、nio 、aio介绍
2017-04-21 07:59
253 查看
阻塞和非阻塞
进程在访问数据的时候,数据是否准备就绪的一种处理方式,当数据没有准备好的时候,阻塞:往往需要等待缓冲区中的数据准备好过后才处理其他的事情,否则一直等待在那里。非阻塞:当我们的进程访问我们的缓冲区的时候,数据没有准备好的时候直接返回不需要等待,数据有的时候也直接返回。一句话阻塞方式下read或者write 函数将一直等待,而非阻塞方式下,read或者write 会立即返回一个状态值。
同步和异步的方式
同步和异步都是应用程序和操作系统处理IO时间锁的一种方式,同步应用程序直接参与io读写的操作,异步所有的io读写交给操作系统去处理,同步的方式在处理io事件的时候 必须阻塞在某个方法上面等待我们的io时间完成(阻塞io事件或者通过轮询io事件的方式)对于异步来说所有的io读写都交给操作系统这个时候,可以去做其它的事情,并不需要去完成真正的io操作,当操作完成io后,给应用程序一个通知就可以了。
同步和异步是目的,阻塞和非阻塞是实现方式。
同步两种方式
1)阻塞到io事件 阻塞到read或者write 这个时候完全不能做其它的事情,让读写方法加入到线程里面,然后阻塞线程来实现对线程性能开销比较大
2)io事件的轮询 多路复用技术(select模式)
读写事件交给一个单独的线程来处理,这个完成io事件的注册功能,还有就是不断的去轮询我们的读写缓冲区看是否有数据准备好,通知相应的读写线程,这样的话以前的读写线程就可以做其他事情、这个时候阻塞的不是io线程,阻塞的是select线程
Java的io模型
BIO: jdk1.4以前我们使用的都是Bio阻塞io
阻塞到读写方法,阻塞到线程来提供性能,对于线程的开销本来就是性能的浪费
nio: jdk1.4以后 多路复用技术(select模式)
实现io事件的轮询方式,同步非阻塞模式,这种方式目前是主流的通信模式,代表有mina,netty
aio: jdk1.7(nio2)才是真正的异步aio,java学习了linux的epoll模式
总结
bio 阻塞的io
nio 同步非阻塞io
AOI 异步非阻塞io
进程在访问数据的时候,数据是否准备就绪的一种处理方式,当数据没有准备好的时候,阻塞:往往需要等待缓冲区中的数据准备好过后才处理其他的事情,否则一直等待在那里。非阻塞:当我们的进程访问我们的缓冲区的时候,数据没有准备好的时候直接返回不需要等待,数据有的时候也直接返回。一句话阻塞方式下read或者write 函数将一直等待,而非阻塞方式下,read或者write 会立即返回一个状态值。
同步和异步的方式
同步和异步都是应用程序和操作系统处理IO时间锁的一种方式,同步应用程序直接参与io读写的操作,异步所有的io读写交给操作系统去处理,同步的方式在处理io事件的时候 必须阻塞在某个方法上面等待我们的io时间完成(阻塞io事件或者通过轮询io事件的方式)对于异步来说所有的io读写都交给操作系统这个时候,可以去做其它的事情,并不需要去完成真正的io操作,当操作完成io后,给应用程序一个通知就可以了。
同步和异步是目的,阻塞和非阻塞是实现方式。
同步两种方式
1)阻塞到io事件 阻塞到read或者write 这个时候完全不能做其它的事情,让读写方法加入到线程里面,然后阻塞线程来实现对线程性能开销比较大
2)io事件的轮询 多路复用技术(select模式)
读写事件交给一个单独的线程来处理,这个完成io事件的注册功能,还有就是不断的去轮询我们的读写缓冲区看是否有数据准备好,通知相应的读写线程,这样的话以前的读写线程就可以做其他事情、这个时候阻塞的不是io线程,阻塞的是select线程
Java的io模型
BIO: jdk1.4以前我们使用的都是Bio阻塞io
阻塞到读写方法,阻塞到线程来提供性能,对于线程的开销本来就是性能的浪费
nio: jdk1.4以后 多路复用技术(select模式)
实现io事件的轮询方式,同步非阻塞模式,这种方式目前是主流的通信模式,代表有mina,netty
aio: jdk1.7(nio2)才是真正的异步aio,java学习了linux的epoll模式
总结
bio 阻塞的io
nio 同步非阻塞io
AOI 异步非阻塞io
相关文章推荐
- Java中网络IO的实现方式(BIO、NIO、AIO)介绍
- BIO/NIO/AIO相关概念的介绍
- Java的BIO、NIO和AIO介绍
- BIO、NIO、AIO介绍
- IO(一):传统IO(基于字符,字节,Socket) 与BIO,NIO,AIO 介绍
- IO(一):传统IO(基于字符,字节,Socket) 与BIO,NIO,AIO 介绍
- BIO,NIO,AIO及netty的介绍
- BIO、NIO、AIO简析Java版
- BIO与NIO、AIO的区别(这个容易理解)
- 也谈BIO | NIO | AIO (Java版)
- 对BIO,NIO,AIO的理解
- Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
- BIO、NIO、AIO系列一:NIO
- BIO,NIO,AIO区别(简)
- 系统间的通信(BIO,NIO,AIO)
- IO三种方式:BIO,NIO,AIO (异步读写asynchronous IO)
- 网络编程(3)-BIO,NIO,AIO
- JAVA 中BIO,NIO,AIO的理解
- JAVA 中BIO,NIO,AIO的理解
- Java BIO,NIO,AIO的区别