Reactor模式-----单Reactor单线程

Reactor模式:

1.Reactor模式,通过一个或多个输入同时传递给服务处理器(基于事件驱动)
2.服务器端程序处理传入的多个请求,并将它们同步分派到相应的处理线程,因此Reactor模式也叫Dispatcher模式
3.Reactor模式使用IO复用监听事件,收到事件后,分发给某个线程(进程),这点就是网络服务器高并发处理关键

Reactor模式中核心组成:

1.Reactor
Reactor在一个单独的线程中运行,负责监听和分发事件,分发给适当的处理程序来对IO做出反应,它就像公司电话接线员,它接听来自客户的电话并将线路转移到适当的联系人;
2.Handlers
处理程序执行IO事件要完成的实际事件,类似于客户想要与之交谈的公司中的实际官员,Reactor通过调度适当的处理程序来相应IO事件,处理程序执行非阻塞操作

单Reactor单线程模型图:

在这里插入图片描述

单Reactor单线程方案说明

1.Select是前面IO复用模型介绍的标准网络API,可以实现应用程序通过一个阻塞对象监听多路连接请求
2.Reactor对象通过Select监控客户端1请求事件,收到事件后通过Dispatch进行分发
3.如果是建立连接请求事件,则由Acceptor通过Accept处理连接请求,然后创建一个Handler对象处理连接完成后的后续业务处理
4.如果不是建立连接事件,则Reactor会分发调用连接对应的Handler来相应
5.Handler会完成read 业务处理,send的完整业务流程
总结:服务器端用一个线程通过多路复用搞定所有IO操作,编码简单,清晰明了,但是如果客户端连接数量较多,将无法支撑

方案优缺点分析:

优点:
模型简单,没有多线程,进程通信,竞争的问题,全部都在一个线程中完成
缺点:
性能问题:只有一个线程,无法完全发挥出多核CPU的性能,Handler在处理某个连接上的业务时,整个进程无法处理其他连接事件,很容易导致性能瓶颈
可靠性问题:线程意外终止,或者进入死循环,会导致整个系统通信模块不可用,不能接受和处理外部消息,造成节点故障.
使用场景:客户端的数量有限,业务处理非常快速,比如Redis在业务处理的时间复杂度O(1)的情况.

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

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

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

猜你喜欢

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