bio与nio的区别

1、bio同步阻塞io:在此种方式下,用户进程在发起一个IO操作以后,必须等待IO操作的完成,只有当真正完成了了IO操作以后,用户进程才能运行行。JAVA传统的IO模型属于此种方式!

2、nio同步非阻塞式I/O;java NIO采用了了双向通道进行行数据传输,在通道上我们可以注册我们感兴趣的事件:连接事件、读写事件;NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。传统IO基于字节流和字符流进行行操作,而NIO基于Channel和Buffer(缓冲区)进行行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。

BIO (Blocking I/O):同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。这里里使用那个经典的烧开水例例子,这里里假设一个烧开水的场景,有一排水壶在烧开水,BIO的工作模式就是, 叫一个线程停留留在一个水壶那,直到这个水壶烧开,才去处理理下一个水壶。但是实际上线程在等待水壶烧开的时间段什什么都没有做。

NIO (New I/O):同时支持阻塞与非阻塞模式,但这里里我们以其同步非阻塞I/O模式来说明,那么什什么叫做同步非阻塞?如果还拿烧开水来说,NIO的做法是叫一个线程不不断的轮询每个水壶的状态,看看是否有水壶的状态发生了了改变,从而进行行下一步的操作。

AIO ( Asynchronous I/O):异步非阻塞I/O模型。异步非阻塞与同步非阻塞的区别在哪里里?异步非阻塞无需一个线程去轮询所有IO操作的状态改变,在相应的状态改变后,系统会通知对应的线程来处理理。对应到烧开水中就是,为每个水壶上面装了了一个开关,水烧开之后,水壶会自动通知我水烧开了了。


版权声明:本文为siyuanwai原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。