必威体育Betway必威体育官网
当前位置:首页 > IT技术

反应堆模式(reactor)

时间:2019-10-19 21:13:24来源:IT技术作者:seo实验室小编阅读:86次「手机版」
 

反应堆

在提到高性能服务器编程的时候肯定有听过reactor模式,如果只是简单的写一个服务器和客户端建立连接的程序来熟悉一下使用socket函数编程,一般这种情况都是同步方式实现的,服务器阻塞等待客户端的连接,期间服务器不能做其他事情。是不是有更好的实现方式,让服务器可以提高效率,这就是反应堆模式要做的。

  • 同步方式

之前也说了,同步方式是在阻塞等待,会浪费大量的服务器资源,效率不高,如果还不是多线程的话就更加的糟糕,当你在连接下载小视频的时候,别人就下不了(连连接请求都会被服务器忽视),别人就很气。是很简单的单线连接。

  •  多线程方式

那么为了处理多个客户端的连接请求,为每个连接过来的客户端单独开出一个线程进行处理(这里提到的多个线程中的每个线程都是同步方式实现的),每个线程中的每个操作都是阻塞的直到完成。就拿其优点来说,每个线程之间是比较独立的,可以接受不同的请求执行不同的操作,并且由于是同步的方式,对于开发者来说开发也比较简单(可以尽情地使用顺序操作和阻塞操作)。

缺点也比较明显:1.在多线程下使用同步方式是需要加锁的!总要有点难度,要想使用共享资源就需要对这方面用点心;2.这么多线程再切换的时候开销是不能忽略不计的;3.移植性不高,因为有的机子不支持多线程。

下图就是多线程实现的一个web服务器的图例

当服务器开有多个线程,每个线程都相当于一个同步方式实现的web服务器(就上面说的那种),这样看似可以同时接收多个浏览器的请求,但是实则可供连接的数目是固定的,你开了多少个线程就能给多少个浏览器连接,如果需要增加同时连接的浏览器的数量,只能再多加几个线程。同步的一些缺点也依然没有解决。

  • 反应器模式(reactor)

反应器模式听起来名字高大上,简单的来讲就是select、poll、epoll的使用搭建出一个异步方式的web服务器,这里的异步通俗的讲就是,当服务器在等待浏览器连接请求的时候是自由的,不是阻塞的(同步是阻塞等待的),服务器可以干别的事情,当有浏览器的连接请求的时候,服务器被通知,执行回调函数来建立起连接。下面是一个反应堆模式实现的web服务器的图例,分别是连接请求和文件传输请求的web服务器

HTTPhandle事件处理器,主要负责事件来临之后进行的操作,Initiation Dispatcher核心就是用select、poll、epoll实现的,当有请求到达Initiation Dispacher会通知http handler数据到来,应该去读去解析了,基本是http handle主缆了大部分的工作

缺点就是可能对于http handle来说处理的事务略多会影响一部分性能并且过于冗杂(就是说太重了),读写操作内部本身还是同步的,在读写的过程中会浪费大量时间(毕竟读写比较慢),和之前的前摄器模式的那篇文章作对比来说,前摄器就是把读写操作让给操作系统来做,减少时间浪费,把自身解放出来做其他事情,这就是前摄器和反应堆最大的差距。

参考资料:http://www.kuqin.com/ace-2002-12/Part-One/Chapter-8.htm

相关阅读

360[极速模式]浏览器无法加载插件(mooc)的解决方案摸索

我们可能在浏览一些基于网络的文档共享的网站时会遇到“无法加载插件”的提示,如道客巴巴(doc88)慕课(mooc)等,我们心里也清楚这个是fla

消息模式Toast.makeText的几种常见用法

原文地址为:消息模式Toast.makeText的几种常见用法转载自:http://daikainan.iteye.com/blog/1405575Toast 是一个 View 视图,快速的

MVP模式从入门到精通

首先附上自己写的一个MVP的demo,这是一个很标准的MVP,Github地址如下: https://github.com/SilasGao/MVPDemo 首先MVP 是从经典的MV

淘宝全球购是正品吗?全球购有哪些模式?

喜欢海淘的朋友应该买过全球购的东西,但是看完评价后多少犹豫了。看着代购生意的火爆,甚至自己也想做代购,但是你知道有几家淘宝全球

设计模式 | 适配器模式及典型应用

适配器模式 适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器

分享到:

栏目导航

推荐阅读

热门阅读