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

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

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

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

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

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

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

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

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

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

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

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

Reactor如何处理这个问题呢:

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

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

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

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

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

转载自:点击打开链接

Reactor模式:反应器模式相关推荐

  1. Reactor模式--VS--Proactor模式

    一. Reactor and Proactor 1 概述 IO读写时,多路复用机制都会依赖对一个事件多路分离器,负责把源事件的IO 事件分离出来,分别到相应的read/write事件分离器.涉及到事件 ...

  2. reactor和proactor模式

    首先分享一下,我在网上看到的两篇不错的文章:正是这两篇文章才理解了reactor和proactor模式; Reactor模式,或者叫反应器模式 高性能IO设计的Reactor和Proactor模式 首 ...

  3. java reactor 模式_Reactor模式

    备注: 文章很长,建议收藏起来,慢慢读! 并且,持续更新中- 高薪必备1 : <Netty Zookeeper Redis 高并发实战> 为你打造NIO.Netty 高性能底层原理知识底座 ...

  4. 高性能IO设计的Reactor和Proactor模式(转)

    在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作. 在比较这两个模式之前,我们首先的搞明白 ...

  5. 查询oracle模式对象信息,ORACLE 模式和模式对象

    模式和模式对象一个模式(schema)为模式对象(scehma object)的一个集合,每一个数据库用户对应一个模式.模式对象为直接引用数据库数据的逻辑结构,模式对象包含如表.视图.索引.聚集.序列 ...

  6. 设计模式之建造者模式(生成器模式、Builder)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  7. 如何使用 Spring 实现策略模式+工厂模式

    欢迎关注方志朋的博客,回复"666"获面试宝典 一.策略模式 策略模式定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换 1.策略模式主要角色 主要角色如下: 封装角色( ...

  8. 实践:使用Spring 原生注解来快速实现 策略模式 + 工厂模式

    作者:Richard_Yi juejin.im/post/5db0e910518825648f2ef355 前言 这阵子在做项目组重构的工作,工作中的一部分就是就目前代码库中与企业交互的逻辑抽离出来, ...

  9. CentOS 7 单用户模式+救援模式

    有时候大家可能会忘记自己的root密码,或者错误(命令输入错误,命令位置输入有误等)编辑了一个/etc目录下的核心文件导致系统不能正常启动了!怎么办?重新安装系统那是实在没有办法之举!那我们就进入如下 ...

最新文章

  1. python的六大数据类型中可以改变的数据类型为_Python中数据类型转换
  2. handlebars.js {{#if}}中的逻辑运算符是有条件的
  3. 洛谷 P2695 骑士的工作
  4. Jenkins的安装和卸载(转载)
  5. html访问java接口出现缓存_高可用架构设计(3) -电商商品详情页缓存背景及框架说明...
  6. Image-based Lighting approaches and parallax-corrected cubemap
  7. 一篇关于Content Type的文章
  8. c#和c++互操作(平台调用相关)
  9. 编程实现strcpy函数
  10. 19电子设计速成实战宝典pdf_ALTIUMDESIGNER19(中文版)电子设计速成实战宝典
  11. 【Day5.7】美食街实在吃不下去,回暹罗商圈再晚餐
  12. java计算机毕业设计招聘管理系统源码+系统+mysql数据库+lw文档
  13. 微博html5版打不开,电脑新浪微博页面打不开怎么办|电脑微博无法打开的解决方法...
  14. 毕业设计 - 题目:基于深度学习的图像风格迁移 - [ 卷积神经网络 机器视觉 ]
  15. 自控力读书笔记 第六章 “那又如何”:情绪低落为何会使人屈服于诱惑?
  16. HTML5期末大作业:网站——仿游戏官网(龙之谷)HTML+CSS+JavaScript
  17. Zain Iraq通过MATRIXX Software推出突破性数字品牌oodi
  18. pytorch之torch.gather方法
  19. 小熊派4G开发板初体验SDK开发
  20. js点击下载html页面

热门文章

  1. appollo消息服务器,搭建Apache apollo消息队列服务、简单访问
  2. poiExcel格式设置,很好用,感谢大佬
  3. 三人易行PLC编程培训怎么样?
  4. 犹太人的经典成功智慧
  5. 铣床是什么?怎么分类
  6. 遇到不同网段互相访问的一些问题的总结
  7. Mac安装、配置Maven
  8. Core dump去哪里了?
  9. Python如何导入自己编写的py文件(.pyx文件 .pyd文件)
  10. 电力电子与电力传动类毕业论文文献包含哪些?