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

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

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

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

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

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

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

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

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

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

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

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

Reactor如何处理这个问题呢:

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

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

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

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

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

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

reactor设计模式 1相关推荐

  1. IO:Reactor设计模式

    reactor设计模式 reactor设计模式,是一种基于事件驱动的设计模式. 这个模式的结构图如下: 图中的handle对应的是操作系统提供的句柄,例如I/O句柄,Event_Handler类持有这 ...

  2. Reactor设计模式

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

  3. redis的事件模型详解(结合Reactor设计模式)

    文章基于redis-4.0.1源码详细介绍一下redis的事件模型. 一.redis事件模型概览 redis是一个事件驱动的服务程序,在redis的服务程序中存在两种类型的事件,分别是文件事件和时间事 ...

  4. 后端开发-Reactor设计模式

    在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,Proactor用于异步I/O操作. Reactor模式称之为响应器模式,通常用 ...

  5. Reactor设计模式 -- 基于EpollET模式

    TOC epoll的工作方式 epoll有2种工作方式-水平触发(LT)和边缘触发(ET) ; epoll默认状态下就是LT工作模式 ,select和poll其实也是工作在LT模式下,epoll既可以 ...

  6. Reactor设计模式详解

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

  7. I/O模型系列之四:两种高性能IO设计模式 Reactor 和 Proactor

    不同的操作系统实现的io策略可能不一样,即使是同一个操作系统也可能存在多重io策略,常见如linux上的select,poll,epoll,面对这么多不同类型的io接口,这里需要一层抽象api来完成, ...

  8. 设计模式——Reactor模式

    Reactor模式 Reactor是一种事件处理的设计模式,经常用于高并发的服务端网络开发中.异步的收取消息.将不同的消息绑定到不同的回调函数上.传统的设计是一种同步的停等协议,读写操作执行后要等待当 ...

  9. NIO和Reactor

    本文参考Doug Lea的Scalable IO in Java. 网络服务 随着网络服务的越来越多,我们对网络服务的性能有了更高的要求,提供一个高性能,稳定的web服务是一件很麻烦的事情,所以有了n ...

最新文章

  1. 洛谷 P1843 奶牛晒衣服
  2. 【零基础学习iOS开发】【02-C语言】08-基本运算
  3. C++中为何构造函数不可是虚函数,而析构函数可以?
  4. BZOJ1935 园丁的烦恼
  5. LeetCode_Convert Sorted Array to Binary Search Tree(Java实现)
  6. 显卡在电脑什么位置_DIY组装电脑教程,新手也能学会自己组装电脑
  7. 华为Mate 40系列预热海报颠覆传闻:这个设计手机圈独树一帜
  8. 如何在设计项目中使用冷调酷色
  9. WMS智能仓储系统成长史?
  10. ServletContext作用功能详解
  11. 向量的范数(有例子,简单好理解)
  12. 支付宝支付模块-社区分享-接口样例-常见问题帖
  13. uniapp uni-swipe-action 滑动删除
  14. 钉钉网页版入口,存档
  15. kali_vps,debian,Ubuntu下搭建LAMP环境
  16. ez_website
  17. 服务器南北桥芯片 维修,[故障处理日记] 集显主板北桥虚焊故障及维修工具与技巧...
  18. 其他总结(七)--解决谷歌浏览器不显示翻译此页按钮(网页自动翻译)
  19. App测试的方法和思路有哪些?一篇文章告诉你答案
  20. Android 指引蒙版的实现

热门文章

  1. RavenDb中的Task异步应用.Net4
  2. windows 批处理
  3. Python rang()函数
  4. activiti5.22 springboot 流程引擎 实战全过程
  5. Java代码块回调,QueueEvent - 队列化执行线程和代码块
  6. css3动画animation,transition
  7. RabbitMQ/pika模块
  8. nw.js FrameLess Window下的窗口拖拽与窗口大小控制
  9. Android学习(二十)Notification通知栏
  10. Windows修改注册表按键映射