Reactor模式-----单Reactor多线程与主从Reactor多线程

单Reactor多线程:

针对单Reactor多线程模型中,Reactor在单线程中运行。高并发场景下容易成为性能瓶颈,可以让Reactor在多线程中运行

线程模型:

在这里插入图片描述

方法说明:

1.Reactor 对象通过select监控客户端请求事件,收到事件后,通过dispatch进行分发
2.如果是连接请求,则右Acceptor通过accept处理连接请求,然后创建一个Handler对象处理完成连接后的各种事件
3.如果不是连接请求,则由Reactor分发调用连接对应的handler来处理
4.handler只负责相应事件,不做具体的业务处理,通过rad读取数据后,会分发给后面的worker线程池的某个线程处理业务
5 worker线程池会分配一个独立的线程,完成真正的业务,同时把处理的结果返回给handler
6 handler收到响应后,通过send将结果返回给client
优点:
可以充分利用多核CPU的处理能力
缺点:
多线程会数据共享和访问比较复杂,reactor处理了所有的事件的监听和相应,在单线程运行,在高并发场景容易出现性能瓶颈

主从Reactor多线程:

针对单Reactor多线程模型中,Reactor在单线程中运行。高并发场景下容易成为性能瓶颈,可以让Reactor在多线程中运行。

线程模型:

在这里插入图片描述

方案说明:

1.Reactor主线程MainReactor对象通过select监听连接事件,收到事件后,通过Acceptor处理连接事件
2.当Acceptor处理连接事件后,MainReactor将连接分配给SubReactor
3.subReactor将连接加入到连接队列进行监听,并创建handler进行各种事件处理
4.当有新的事件发生时,subReactor就会调用对应的handler进行处理
5.handler通过rand读取数据,会分发给后面的worker线程进行处理
6.wroker线程池会分独立的worker线程进行业务处理,并返回结果
7.handler收到响应的结果后,再通过sned将结果返回给client
8.Reactor主线程可以对应多个Reactor子线程,即MainReactor可以关联多个subReactor。
优点:
父线程与子线程的数据交互简单,职责明确,父线程只需要接收新连接,子线程完成后续的业务处理
父线程与子线程的数据交互简单,Reactor主线程只需要把新连接传给子线程,子线程无需返回数据
缺点:
编程复制读较高。

Reactor模式具有如下优点:

1.响应快,不必为单个同步时间所阻塞,虽然Reactor本身依然是同步的
2.可以最大程度的避免复杂的多线程以及同步问题,避免了多线程/进程的切换开销
3.扩展性好,可以方便的通过Reactor实例个数来充分的利用CPU的资源
4.复用性好,Reactor模型本身与具有事件处理逻辑无关,具有很高的复用性

学习年限不足,知识过浅,说的不对请见谅。

世界上有10种人,一种是懂二进制的,一种是不懂二进制的。

发布了71 篇原创文章 · 获赞 54 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/weixin_43326401/article/details/104202424