在BIO1图中:客户端先向服务器1请求数据,直到服务器返回数据之后才能向服务器2请求数据。依次循环如果某个服务器阻塞时间过长就会影响下一次的数据传输。无法处理多个连接
BIO2.jpg
在BIO2图中启用了两个线程来分别响应两个服务器的传输,其中一个服务器阻塞不会影响另一个。但是如果线程数过大就会影响效率,并且大部分线程线程大量时间都是阻塞的。
NIO.jpg
在NIO中如果是可轮询状态,selector会不断的轮询两个连接,如果有注册的事件发生就去处理(此时是阻塞的),如果没有的话就一直轮询(如果是在BIO中如果没有对应的事件就阻塞到事件发生)。
所以说在NIO中可以使用单线程实现对多连接的处理。
网友评论