一、Reactor模式是什么
反应器设计模式(Reactor pattern)是一种为处理并发服务请求,并将请求提交到一个或
者多个服务处理程序的事件设计模式。当客户端请求抵达后,服务处理程序使用多路分配策略,由一个非阻塞的线程来接收所有的请求,然后派发这些请求至相关的工作线程进行处理。

二、什么场景下使用Reactor模式?

对于高并发系统,常会使用Reactor模式,其代替了常用的多线程处理方式,节省系统

的资源,提高系统的吞吐量。

下面用比较直观的形式来介绍这种模式的使用场景。

以餐厅为例,每一个人就餐就是一个事件,顾客会先看下菜单,然后点餐,处理这些就

餐事件需要服务人员。

就像一个网络服务会有很多的请求,服务器会收到每个请求,然后指派工作线程去处理

一样。

在多线程处理方式下:

一个人来就餐,一个服务员去服务,然后客人会看菜单,点菜。 服务员将菜单给后厨。

二个人来就餐,二个服务员去服务……

五个人来就餐,五个服务员去服务……

这类似多线程的处理方式,一个事件到来,就会有一个线程为其服务。

很显然这种方式在人少的情况下会有很好的用户体验,每个客人都感觉自己享有了最好

的服务。

如果这家餐厅一直这样同一时间最多来5个客人,这家餐厅是可以很好的服务下去的。

由于这家店的服务好,吃饭的人多了起来。

同一时间会来10个客人,老板很开心,但是只有5个服务员,这样就不能一对一服务

了,有些客人就不能马上享有服务员为其服务了。

老板为了挣钱,不得不又请了5个服务员。

现在又好了,每位顾客都享受最好最快的待遇了。

越来越多的人对这家餐厅满意,客源又多了,同时来吃饭的人到了20人,老板高兴但又

高兴不起来了,再请服务员吧,占地方不说,还要开工钱,再请人就挣不到到钱了。

怎么办呢?

老板想了想,10个服务员对付20个客人也是能对付过来的,服务员勤快点就好了,伺候

完一个客人马上伺候另外一个,还是来得及的。

综合考虑了一下,老板决定就使用10个服务人员的线程池!

但是这样又有一个比较严重的缺点:如果正在接受服务员服务的客人点菜很慢,其他的

客人可能就要等好长时间了。

有些脾气火爆的客人可能就等不了走人了。

这样,那就引入了Reactor模式。

那么,Reactor模式是如何处理这个问题呢?

老板后来发现,客人点菜比较慢,大部服务员都在等着客人点菜,其实干的活不是太

多。

老板之所以能当老板当然有点不一样的地方,终于发现了一个新的方法,那就是:当客

人点菜的时候,服务员就可以去招呼其他客人了,等客人点好了菜,直接招呼一声“服

务员”,马上就有个服务员过去服务。

在用了这个新方法后,老板进行了一次裁员,只留了一个服务员!

这就是用单个线程来做多线程的事。

实际的餐馆都是用的Reactor模式在服务。
---------------------
作者:wangchao_yun
来源:CSDN
原文:https://blog.csdn.net/u013219087/article/details/81229873
版权声明:本文为博主原创文章,转载请附上博文链接!

Reactor模式是什么(转载)的更多相关文章

  1. java NIO的多路复用及reactor模式【转载】

    关于java的NIO,以下博客总结的比较详细,适合初学者学习(http://ifeve.com/java-nio-all/) 下面的文字转载自:http://www.blogjava.net/hell ...

  2. 高性能IO之Reactor模式(转载)

    讲到高性能IO绕不开Reactor模式,它是大多数IO相关组件如Netty.Redis在使用的IO模式,为什么需要这种模式,它是如何设计来解决高性能并发的呢? 最最原始的网络编程思路就是服务器用一个w ...

  3. 【转载】Reactor模式,或者叫反应器模式

    Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或 ...

  4. Reactor模式和NIO(转载二)

    本文可看成是对Doug Lea Scalable IO in Java一文的翻译. 当前分布式计算 Web Services盛行天下,这些网络服务的底层都离不开对socket的操作.他们都有一个共同的 ...

  5. 【转载】Reactor模式和NIO

    当前分布式计算 Web Services盛行天下,这些网络服务的底层都离不开对socket的操作.他们都有一个共同的结构:1. Read request2. Decode request3. Proc ...

  6. ACE - Reactor模式源码剖析及具体实现(大量源码慎入)

    原文出自http://www.cnblogs.com/binchen-china,禁止转载. 在之前的文章中提到过Reactor模式和Preactor模式,现在利用ACE的Reactor来实现一个基于 ...

  7. 也谈Reactor模式

    何谓Reactor模式?它是实现高性能IO的一种设计模式.网上资料有很多,有些写的也很好,但大多不知其所以然.这里博主按自己的思路简单介绍下,有不对的地方敬请指正. BIO Java1.4(2002年 ...

  8. 转一篇:Reactor模式

    转载自:http://www.blogjava.net/DLevin/archive/2015/09/02/427045.html 前记 第一次听到Reactor模式是三年前的某个晚上,一个室友突然跑 ...

  9. ACE反应器(Reactor)模式(2)

    转载于:http://www.cnblogs.com/TianFang/archive/2006/12/18/595808.html 在Socket编程中,常见的事件就是"读就绪" ...

随机推荐

  1. Oracle之视图

    Oracle之视图 2018.9.12 由于视图的数据与表数据互相关联,所以切记谨慎操作 建立视图 使用下面sql语句来完成视图的创建 create or replace view 视图名 as se ...

  2. rm -f + 文件名+* 与 rm -f + 文件名* 的不同效果,大坑呀。

    rm -f catalina.2018-10-22.*    与*号间无空格 rm -f catalina.2018-10-22. *    :多了空格:

  3. 困扰我的c++语法

    以下是我上周学习c++ primer的心得: 1 数组引用作为形参 c++允许将变量定义成数组的引用,以下列代码为例.形参为int (&arr)[10],该参数需分成两部分说明,引用名和 引用 ...

  4. Flask中异常捕获

    HTTP 异常主动抛出 abort 方法 抛出一个给定状态代码的 HTTPException 或者 指定响应,例如想要用一个页面未找到异常来终止请求,你可以调用 abort(404). 参数: cod ...

  5. 配置vue-devtools调试工具

    1. 通过 Git 克隆项目到本地 git clone https://github.com/vuejs/vue-devtools.git 2. Git 进入到 vue-devtools 所在目录,然 ...

  6. springmvc处理器拦截器

    处理器拦截器(interceptor)是做什么用的? 想知道处理拦截器做什么用的,你要先了解下处理·流程链·. 前端控制器(dispatcherServlet)接收到请求,通过handleMappin ...

  7. wampserver 服务器报500错误,侦察小结

    Internal Server Error The server encountered an internal error or misconfiguration and was unable to ...

  8. pads怎么高亮网络

    pads怎么高亮网络 选择完整个网络----再按CTRL+H 就高亮了. 取消高亮是,选择需要取消高亮的整个网络,按 CTRL+U 就取消了. PADS在生成Gerber时过孔盖油设置方法 PADS2 ...

  9. 常用 css html 样式

    CSS基础必学列表 CSS width宽度 CSS height高度 CSS border边框 CSS background背景 CSS sprites背景拼合 CSS float浮动 CSS mar ...

  10. unity独立游戏开发日记2018/09/27

    今天优化了下昨天的代码,并且添加了树木和其他资源的生成.还修复了接近石头后,挖掘图标不出现的bug.目前可以在unity中稳定60-70fps. 详看文章:https://www.cnblogs.co ...