一、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. JavaScript 基础(二)数组

    字符串, JavaScript 字符串就是用'' 和""括起来的字符表示. 字符字面量, \n 换行, \t 制表, \b 退格, \r 回车, \f 进纸, \\ 斜杠,\' 单 ...

  2. MySQL的日志相关内容

    本篇文章介绍一下mysql的备份和日志,由于备份时需要用到日志,所以在讲备份前,如果日志内容篇幅过长,将会把日志和备份分开单独来讲,先简单介绍一下mysql的日志相关内容. MySQL日志 日志是my ...

  3. openresty安装配置 Ubuntu下

    1.进入openresty-1.11.2.4的压缩包木木,我这里是在“/usr/local/”下: 2.进入后执行[tar -xzvf openresty-1.11.2.4.tar.gz]进行解压 3 ...

  4. 深入理解is_callable和method_exists

    一.函数解析 is_callable() 定义: (PHP 4 >= 4.0.6, PHP 5, PHP 7) is_callable — 检测参数是否为合法的可调用结构 bool is_cal ...

  5. webug学习(1)

    webug的题目,比较简单,拿来巩固一哈. 1. 一看就知道是注入漏洞了,啥也不说sqlmap直接开炮. 先-u 之后-u 网址 --current-db 获取当前网址的数据库 所以当前数据库就是 p ...

  6. PHP中文乱码分类及解决办法大全

    PHP+MYSQL做网站开发通常都会碰到浏览器输出中文字符时乱码,这个问题的原因主要是因为HTML内容编码,PHP文件编码和MySQL数据库编码这三者不一致造成的.下面我们以UTF-8为例简述一下如何 ...

  7. uva 509 RAID!(磁盘数据)

    来自 https://blog.csdn.net/su_cicada/article/details/80085318 习题4-7 RAID技术(RAID!, ACM/ICPC World Final ...

  8. Go语言中的UDP应用

    Go语言中的UDP应用 Go语言中使用UDP是很方便的,net包提供了UDP和TCP的功能,这里使用UDP做了一个UDP广播,然后接收各个设备的返回信息.实现起来很快,总体感觉比使用C#中的UDP更优 ...

  9. R语言学习笔记(十四):零碎知识点(41-45)

    41--ls( ) ls()可以用来列出现存的所有对象. pattern是一个具名参数,可以列出所有名称中含有字符串"s"的对象. > ls() [1] "s&qu ...

  10. shell重温---基础篇(printf命令&test命令)

    在shell中还有一个输出的命令,那就是printf了.它模仿的是C程序库(library)里的printf()程序,是由POSIX标准所定义,所以嘞,使用printf脚本比echo移植性要好一点,它 ...