BIO
阻塞式IO,同一时间只能读或者写。虽然可以通过多线程来满足多通路,但是各个线程自身还是在阻塞的。
由于BIO是面向流的,阻塞也就出现在三个地方:accept、InputStream、OutputStream。
即:accept等待接受TCP请求,接收时候建一组IO流,交给另外一个线程去处理。
thread thread thread
| | |
| | |
| | |
I\O I\O I\O
NIO
非阻塞式IO,拥有“三板斧”
一、底层用buffer储存数据,即可读又可写,且支持异步。
二、channel,“人如其名”通道,替代BIO中的输入输出流,以多个channel的方式去实现多通路。只能使用buffer来交互数据。通过注册在selector中使用。
三、selector,轮询器,以配合channel实现“注册-轮询”的方式去实现异步传输。也就是说channel注册到selector中之后,selectory就一直挨个问在这里注册了的channel,有没有谁准备好了呀。
区别
BIO
- 面向了流
- 同一时间只能读或写(阻塞。
- 排队点饭
NIO
- 面向缓冲区
- 非阻塞
- 等待点名