NIO的工作机制。

下图描述了基于NIO工作方式的Socket请求过程

    上图中的Selector可以同时监听一组通信信道(Channel)上的I/O状态,前提是这个Selector已经注册到这些通信信道中。选择器Selector可以调用select()方法检查已经注册的通信信道上I/O是否已经准备好,如果没有至少一个信道I/O状态有变化,那么select方法会阻塞等待或在超时时间后返回0.如果有多个信道有数据,那么将会把这些数据分配到对应的数据Buffer中。所以关键的地方是,有一个线程来处理所有连接的数据交互,每个连接的数据交互都不是阻塞方式,所以可以同时处理大量的连接请求。
    在事件应用中,我们通常把Server端的监听连接请求的事件和处理请求的事件放在两个线程中:一个线程专门负责监听客户端的连接请求,而且是以阻塞方式执行的;另外一个线程专门负责处理请求,这个专门处理请求的线程才会真正采用NIO的方式,像Web服务器Tomcat和Jetty都是使用这个处理方式。

猜你喜欢

转载自blog.csdn.net/en_joker/article/details/81288608
今日推荐