reactor设计模式 1

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

 

并发系统常使用reactor模式,代替常用的多线程的处理方式,节省系统的资源,提高系统的吞吐量。

 

先用比较直观的方式来介绍一下这种方式的优点,通过和常用的多线程方式比较一下,可能更好理解。

以一个餐饮为例,每一个人来就餐就是一个事件,他会先看一下菜单,然后点餐。就像一个网站会有很多的请求,要求服务器做一些事情。处理这些就餐事件的就需要我们的服务人员了。

 

在多线程处理的方式会是这样的:

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

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

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

 

这个就是多线程的处理方式,一个事件到来,就会有一个线程服务。很显然这种方式在人少的情况下会有很好的用户体验,每个客人都感觉自己是VIP,专人服务的。如果餐厅一直这样同一时间最多来5个客人,这家餐厅是可以很好的服务下去的。

 

来了一个好消息,因为这家店的服务好,吃饭的人多了起来。同一时间会来10个客人,老板很开心,但是只有5个服务员,这样就不能一对一服务了,有些客人就要没有人管了。老板就又请了5个服务员,现在好了,又能每个人都受VIP待遇了。

 

越来越多的人对这家餐厅满意,客源又多了,同时来吃饭的人到了20人,老板高兴不起来了,再请服务员吧,占地方不说,还要开工钱,再请人就攒不到钱了。怎么办呢?老板想了想,10个服务员对付20个客人也是能对付过来的,服务员勤快点就好了,伺候完一个客人马上伺候另外一个,还是来得及的。综合考虑了一下,老板决定就使用10个服务人员的线程池啦~~~

 

但是这样有一个比较严重的缺点就是,如果正在接受服务员服务的客人点菜很慢,其他的客人可能就要等好长时间了。有些火爆脾气的客人可能就等不了走人了。

 

Reactor如何处理这个问题呢:

老板后来发现,客人点菜比较慢,大部服务员都在等着客人点菜,其实干的活不是太多。老板能当老板当然有点不一样的地方,终于发现了一个新的方法,那就是:当客人点菜的时候,服务员就可以去招呼其他客人了,等客人点好了菜,直接招呼一声“服务员”,马上就有个服务员过去服务。嘿嘿,然后在老板有了这个新的方法之后,就进行了一次裁员,只留了一个服务员!这就是用单个线程来做多线程的事。

 

实际的餐馆都是用的Reactor模式在服务。一些设计的模型其实都是从生活中来的。

 

Reactor模式主要是提高系统的吞吐量,在有限的资源下处理更多的事情。

 

在单核的机上,多线程并不能提高系统的性能,除非在有一些阻塞的情况发生。否则线程切换的开销会使处理的速度变慢。就像你一个人做两件事情,1、削一个苹果。2、切一个西瓜。那你可以一件一件的做,我想你也会一件一件的做。如果这个时候你使用多线程,一会儿削苹果,一会切西瓜,可以相像究竟是哪个速度快。这也就是说为什么在单核机上多线程来处理可能会更慢。

 

但当有阻碍操作发生时,多线程的优势才会显示出来,现在你有另外两件事情去做,1、削一个苹果。2、烧一壶开水。我想没有人会去做完一件再做另一件,你肯定会一边烧水,一边就把苹果削了。

 

理论的东西就不多讲了,请大家参考一下附件《reactor-siemens.pdf》。图比较多,E文不好也可以看懂的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LinkedBlockingQueue应用实例

并发库中的BlockingQueue是一个比较好玩的类,顾名思义,就是阻塞队列。该类主要提供了两个方法put()和take(),前者将一个对象放到队列中,如果队列已经满了,就等待直到有空闲节点;后者从head取一个对象&#…

苹果怎么付费购买内存_【苹果手机多长时间清理一次内存,怎么清理?】

一、微信缓存微信作为每天使用频率最多的软件,是需要重点清理的对象。操作:我—设置—通用—清理微信存储空间—查看微信存储空间,选择联系人进行清理。二、短信现在很少有人会用短信联系,一般都是一些垃圾广告,我们可…

用计算机计算2的31次方,2的31次方,用什么方法可以最快算出来呢

请告诉我过程和怎么算出来的好吗? 2-2的2次方....-2的19次方 2的20次方2 - 2^2 - 2^3 - 2^4 - 。。。。 -2^19 2^202 2^20 - ( 2^2 2^3 2^4 。。。。 2^19)学过等比数列吗,学过就用公式Sna1(1-q^n)/(1/q)(a1-q*an)/(1-q)2^2 2^3 2^4 。 。。。 2^19 2^2(1-2^18)/(…

发票管理软件_财务人员都在用的这款发票管理软件,真的值得购买么?

(1)电子凭证和纸质会计凭证具有同等效力;(2)报销管理也需要经办、审核、审批流程,且能防止重复入账;(3)以电子凭证纸质版入账留档保存的,必须同时保存电子档。以及重复繁琐的发票查验工作,把最近处于风口浪尖的电子发票…

SDL以及扩展库的交叉编译过程简介

下面我介绍一下SDL以及SDL的扩展库在arm11上的交叉编译 在这里我将SDL 交叉编译的相关都安装在/opt/arm目录下 相关简介: SDL官方网站 http://www.libsdl.org/ SDL编译移植(Up-teach6410平台) 系统环境:linux 移植环境:arm11 编译工具链&…

Ref and Out

C#中ref和out的区别: ref 参数需初始化,而out并无此要求。out 参数在调用者返回之前必须有值(调用的函数在运行过程中确定此参数的值)。而ref参数在调用者调用之前必须有值(由调用者设定)。int x; Foo(out …

自动点击器如何设置最快_铁粉技巧 | iPhone如何设置自动开关机,iPhone更改字体...

大家好我是小雷没有废话直奔主题今天让我们看下iPhone如何设置自动开关机首先需要了解的是,iPhone设备是不能设置自动开机的。那么如何每天自动关机呢?1,打开时钟点击计时器。2,点击计时结束时启动3,滑动页面点击停止播…

中国大学慕课计算机专业导论,2015秋计算机专业导论(大连大学)

本课程是计算机科学与技术学科的第一门课程,目的使学生认识和了解计算机科学与技术学科,了解计算机科学与技术学科的基本思维、问题求解框架及典型的方法论,了解计算机科学与技术学科的研究对象及科学技术体系,了解计算机科学与技…

编译zlib库

$ tar zxvf zlib-1.2.3.tar.gz $ cd zlib-1.2.3$ ./configure --prefix/usr/local/arm/3.4.6/arm-linux --shared $ vim MakefileCCarm-linux-gccLDSHAREDarm-linux-ld -shared$ make all$ make install注意:这里是安装在/usr/local/arm/3.4.6/arm-linux目录下由于…

[Buzz.Today]2013.03.14

# Google将砍掉Google Reader 最近一两年养成了每天blog的习惯,桌面上用Feedeamon,iPad上则用Reeder,而二者均为与Google Reader同步,Google这一手让我心痛哦。 [后记] Google Reader的猝死给我们的启示:互联网无法永远…

python contains类似函数_五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码)...

前言:今天为大家带来的内容,是五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码),在这里还是要啰嗦下,为了有更好的观赏性,大部分代码用图片的方式呈现出来!喜欢的话不忘点赞关注不迷路哦…

计算机应用基础 第三版 实验报告,计算机应用基础实验报告(windows).doc

计算机应用基础实验报告(windows)实 验 报 告计算机应用基础实验报告姓名 于航 班级 0531132 学 实验日期2013.09.13课程名称 计算机应用基础 指导教师 洪菁 成绩实验名称:windows的基本操作实验目的:掌握桌面主题的设置掌握任务栏的使用和设置掌握任务切…

python 跳一跳辅助_微信跳一跳辅助自动跳Python

#-*- coding: utf-8 -*-""" 思路 核心:每次落稳之后截图,根据截图算出棋子的坐标和下一个块顶面的中点坐标,根据两个点的距离乘以一个时间系数获得长按的时间识别棋子:靠棋子的颜色来识别位置,通过截图…

asterisk for mipsel

任务:将asterisk1.8.24.0移植到rt5350上面 交叉工具链:mipsel-linux(3.4.2) 1. 配置asterisk,执行./configure --hostmipsel-linux 找不到termcap和libxml2,分别对他们交叉编译,然后将生成的库拷贝到交叉工具链的lib…

uniapp开发实例github_跨端开发痛点?送你一款Vue最流行的跨端框架——uni-app

前言今天来聊一下前端必备技能——小程序开发。从最早发布的微信小程序,到后来的支付宝小程序、字节跳动小程序、百度小程序、QQ小程序,还有最近发布的360小程序,面对这么多套的代码,开发者该如何开发呢?当业务要求同时…

计算机怎么把单元格内容水平居中,win10系统下怎样让Word中的表格内容居中

Word是我们经常会使用到的一款文字处理软件,其具有非常强大的功能。那么,我们应该怎样使Word中的表格内容居中呢?接下来,小编就以 windows10正式版系统 为例,给大家分享具体操作方法。具体如下:1、首先在Word软件中准备…

双稳态电路的两个稳定状态是什么_从双稳态到双“更”稳态 ——叶芳伟课题组在拓扑光子学研究方向上取得新进展...

你拿起一个计算器,输入“26”,计算器会输出“8”;过了一会儿,你又在这个计算器上输入“26”,它依然会输出“8”。这种靠谱的计算器——对于同一个输入,它始终还给我们同一个输出——我们称之为线性计算器或…

Webots实现大疆Mavic2pro无人机定点飞行

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、将无人机当成一个对象1.1定义无人机相关属性1.2定义用于控制无人机运动的代码1.3主函数实现无人机的点位固定和飞行检测 二、用键盘控制测试代码三、效果展…

【C++专题】static_cast, dynamic_cast, const_cast探讨

首先回顾一下C类型转换:C类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion) : 在混合类型的 算术表达式中, 最宽的数据类型成为目标转换…

浅谈程序员的职业规划

不知不觉参加工作成为程序员已经4年多,记得上高中的时候,从网络上知道了很多IT精英创业成功的例子,如没有读过大学的“汽车之家”创始人李想、facebook创始人马克扎克伯格,让我觉得互联网是个充满梦想的舞台,只要有想法…