`
daimojingdeyu
  • 浏览: 271345 次
  • 性别: Icon_minigender_1
  • 来自: 山东
社区版块
存档分类
最新评论

Reactor模式,或者叫反应器模式

    博客分类:
  • Java
阅读更多

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

 

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

 

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

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

 

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

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

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

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

 

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

 

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

 

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

 

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

 

Reactor如何处理这个问题呢:

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

 

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

 

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

 

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

 

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

 

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

 

 

好了,睡觉,临了,支持一下老婆的淘客,难得她老人家有三分钟热情,淘宝皇冠店铺精选

分享到:
评论
22 楼 songwangchu 2017-04-02  
不错啊。哈哈哈
21 楼 yuanliangding 2016-08-20  
很简洁易懂。怎么没有系列文章
20 楼 过冷水 2015-12-16  

讲的不错
19 楼 Hero_z 2015-07-02  
讲的非常通俗易懂,108个赞!!!
18 楼 wangruofei1 2015-02-27  
些的不错 
17 楼 jiangli19192 2014-12-24  
不错,总算是有看懂的了。
16 楼 liaozhimin 2014-12-19  
对于这种文章,我只能说:能不能再多点,还没看够!
15 楼 blsuper 2014-03-12  
14 楼 SwordShadow 2014-02-13  
通俗易懂,很强大
13 楼 wurenny 2013-09-22  
是你自己写的么,很喜欢这种通俗的解说,生动也容易记住, 比起那些看似“高端”的描述好理解多了,有些文章是写得头头是道,扯得东西也很多,但读者搞半天看完还是一头雾水。
12 楼 chenchangqun 2013-09-10  
幽默机智,深入浅出,通俗易懂
11 楼 jinhongda 2013-04-19  
程序员难得有这么幽默的
10 楼 Samurai 2012-11-29  
最后句话亮了
9 楼 nut1018 2012-08-18  
哥们讲解的不错
8 楼 ilovebaby0530 2012-06-20  
描述的很形象
7 楼 daimojingdeyu 2012-02-14  
jidushan 写道
    

我终于知道你是亮亮了哈,哈哈
6 楼 jidushan 2012-01-09  
    
5 楼 zhangdan_660 2011-12-05  
不错啊
4 楼 willfly0620 2011-12-03  
不错不错啊
3 楼 月迷津渡 2011-11-12  
这个讲法非常生动,比喻恰如其分,且不枯燥。

相关推荐

    ACE反应器(Reactor)模式的深入分析

    反应器(Reactor):用于事件多路分离和分派的体系结构模式通常的,对一个文件描述符指定的文件或设备, 有两种工作方式: 阻塞与非阻塞。所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西...

    Java Reactor反应器模式使用方法详解

    主要介绍了Java Reactor反应器模式使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Reactor反应器的实现方法详解

    本篇文章是对Reactor反应器的实现方法进行了详细的分析介绍,需要的朋友参考下

    Scalable IO in Java.zip

    文章中基于Reactor反应器模式的几种服务模型架构,阅读这篇文章有助于你更深入了解Netty等服务框架的编程思想与设计模式。同时压缩包内还包含reactor-siemens.pdf描述reactor的英文论文,有助于加深reactor模式的...

    ACE技术论文集(已翻译为中文)

    第 7 章 ACE 反应器(Reactor)的设计和使用:用于事件多路分离的面向对象框架 第 8 章 前摄器(Proactor):用于为异步事件多路分离和分派处理器的对象行为模式 第 9 章 接受器-连接器(Acceptor-Connector):...

    ACE学习文档大全.rar

    ACE 入门,ACE中文文档,ACE_Task框架,ACE的框架及其核心,ACE反应器(Reactor)模式,ACE线程管理机制,ACE通用服务端框架,ACE通用客户端框架,ACE中TCP通信

    剖析Python的Twisted框架的核心特性

    就reactor模式的网络IO而言,应该是同步IO而不是异步IO。而Dave第一章中提到的异步,核心在于:显式地放弃对任务的控制权而不是被操作系统随机地停止,程序员必须将任务组织成序列来交替的小步完成。因此,若其中一...

    基于S-x空间反应分离循环系统的最优工艺条件研究 (2010年)

    针对定态、恒温、等容反应过程,将二维...以 Van de Vusse反应模式为例,分析了关键反应物转化率、未反应物的回收率以及产品分离程度对 RSR系 统最大总收率的影响,获得了最佳 CSTR―分离器―循环结构及其最佳工艺条件。

    Linux高性能服务器编程

    第8章 高性能服务器程序框架 8.1 服务器模型 8.1.1 CS模型 8.1.2 P2P模型 8.2 服务器编程框架 8.3 IO模型 8.4 两种高效的事件处理模式 8.4.1 Reactor模式 8.4.2 Proactor模式 8.4.3 模拟Proactor模式 8.5...

Global site tag (gtag.js) - Google Analytics