BIO | NIO |
---|---|
面向流(Stream Oriented) | 面向缓冲区(Buffer Oriented) |
阻塞IO(Blocking IO) | 非阻塞IO(Non Blocking IO) |
(无) | 选择器(Selectors) |
单向的 | 双向的 |
- BIO 以
流
的方式处理数据,而 NIO 以块(缓冲区)
的方式处理数据,块 I/O 的效率比流 I/O 高很多。 - Selector 能够检测多个注册的通道上是否有事件发生(注意:多个Channel以事件的方式可以注册到同一个Selector),如果有事件发生,便获取事件然后针对每个事件进行相应的处理。这样就可以
只用一个单线程去管理多个通道
,也就是管理多个连接
和请求
。只有在连接/通道
真正有读写事件发生时,才会进行读写,就大大地减少了系统开销,并且不必为每个连接
都创建一个线程
,不用去维护多个线程。避免了多线程之间的上下文切换导致的开销。
这里要区分连接和线程,连接相当于客户,线程相当于银行柜台接待人员,不能为每个客户都创建一个线程,即增加一个接待人员,因为不是每个客户每时每刻都有业务要办理。
BIO:(Blocking IO)
BIONIO (Non-Blocking IO)
NIOSelector 一般称为选择器
,也可以翻译为多路复用器
,
事件
连接:Connect(连接就绪)、Accept(接受就绪)、
读写:Read(读就绪)、Write(写就绪)
网友评论