NIO是一种新的IO模型(Recator模型),新主要体现在多路复用,事件驱动上

1、多路复用,一个线程可以处理多个socket请求,通过多个socket注册在一个select上面,然后不断调用select来获取被**的socket,即达到在一个线程中,处理多个socket请求目的,而在传统(同步阻塞)IO模型中,需要通过多线程的方式才能达到此目的,传统的IO模型由于使用多线程,就会有线程数量以及线程上下文切换等限制。

2、事件驱动(其实就是观察者模式),模型图如下

Java之NIO理解

如图所示,EventHandler为IO的事件处理器(观察者),Reactor为管理EventHandler类,事件的注册,删除等(被观察者),reactor的handle_event函数会不断循环调用内核的selec()函数(同步事件多路分离器(一般是内核)的多路分离函数),只要某个文件句柄被**(可读写),select()函数就返回,handle_event会调用相关的事件处理函数EventHandler上的handle_event()函数。

Java之NIO理解

时序图如上图所示,使用reactor模型之后,用户线程注册事件之后,可以去执行其他事情(异步),等相关读写工作就绪之后,Reactor会通知用户线程进行读写。用户IO线程轮询是否读写好等工作由Reactor上的handle_events处理,Reactor会调用内核select函数检查socket的状态。当socket被**的时候,通知用户线程(或调用户线程的回掉函数)。执行EventHandler的hand_event()函数。由于select函数是阻塞的,所以多了复用模型被叫做异步阻塞模型,注意,这里所说的阻塞并不是socket上read等操作的阻塞,socket上这些操作时非阻塞的(事件模型)。

参考:http://blog.csdn.net/baixiaoshi/article/details/48708347

相关文章:

  • 2021-06-11
  • 2021-08-05
  • 2021-09-17
  • 2022-01-22
  • 2021-12-26
  • 2021-05-25
猜你喜欢
  • 2021-06-28
  • 2021-09-15
  • 2021-05-22
  • 2021-08-14
  • 2021-10-17
  • 2021-04-05
  • 2021-08-07
相关资源
相似解决方案