NIO-java

来源:互联网 发布:厦门国家会计学院知乎 编辑:程序博客网 时间:2024/06/05 20:23

java的NIO

  1. 三个主要概念
    1.缓冲区
    2.通道
    3.就绪选择:Selector

NIO和原来的IO是不一样的,NIO可以设置为非阻塞,如果用NIO编写一个客户端;
比如爬虫,那么就需要多个连接,这个时候就可以设置通道为非阻塞的,这样子就可以通过一个客户端创建N多的连接了,以前IO,要等一个连接创建成功,才可以创建下一个连接。
如果用NIO编写一个服务器端的程序,那么就可以用相应量的线程去处理不同并发量的连接了,netty就是基于NIO的。

通道是面向缓冲区的,缓冲区可以参考数据分块传输的概念;

选择器:如果为每一个连接都创建一个线程去处理请求,那么并发大的情况下,线程会导致OOM,如果内存有限的话。调度线程通过选择器,然后遍历注册到该选择器上面的通道的连接是否准备就绪,然后进行处理。比如是否可以开始read或者write数据。

通道和流不一样,流是单向的,而通道是双向的。

0 0