Reactor具体分为三种线程模型
- 单Reactor单线程
- 单Reactor多线程
- 主从Reactor多线程
单Reactor单线程
在单线程模型中Reactor和Acceptor,以及执行任务的线程都在一个线程,当线程在执行耗时的业务处理时,这时的链=连接请求或者其他的业务不能及时的处理,当请求并发量比较低的时候还是可以抗住的,一旦高并发,将不堪重负,而且单线程也没有充分利用多核cpu的特点,浪费了资源
单Reactor多线程
在但Reactor多线程模型下,连接请求及acceptor仍然在一个线程,io的read和send操作也是在Reactor线程,但是将业务逻辑处理交给线程池(多线程),此时不管业务操作多耗时,线程里有多个线程来处理任务,任务之间不会有大的延迟处理的影响,但如果并发太高,Reactor线程也来不及连接请求和读写数据,于是主从Reactor多线程模型产生
主从Reactor多线程模型
在这个模型中,主要有一个mainReactor,多个subReactor,以及每个subReactor都附带一个线程池,这个模型大大的分解了各项处理,mainReactor主要负责监听来自客户端的请求(即selector.select()),当有连接请求到达,将会调用Acceptor函数(位于mainReactor线程中),并将产生的socketChannel注册到一个subReactor的selector中,而且绑定该socketChannel感兴趣的事件(interestOps),当有该socketChannel感兴趣的时间发生时,该subReactor就会调用selector.select()方法,并将需要完成的任务扔到绑定该subReactor的线程池来执行任务,任务结果返回subReactor,然后由subReactor回复客户端.
自己学习Reactor线程模型的一点小小理解,借助大神doug.lea的三张图,第一次写博客,2333.