理解Reactor模式:基于线程和事件驱动

reactor 模式介绍

原文链接:Understanding Reactor Pattern

原文翻译 :

   为了处理处理web请求,有两种竞争的web 架构:基于线程和事件驱动架构

基于线程的架构

   实现一个多线程的服务器最符合直觉的方式是遵循一个连接一个线程的方式。这适用于那些需要兼容线程不安全库而避免多线程的网站。

   也使用多处理器模块来隔离每个请求,因此单个请求的问题不会影响任何其他请求。

  进程太重,它有着更慢的上下文切换和更高的内存消耗。因此,一个连接一个线程的方式适用于更好的可扩展性,尽管多线程编程是容易出错并且难以调试的。

   为了调整线程数量以达到最好的整体性能并且避免创建/销毁线程带来的开销,一贯的做法是将一个单独的派发(dispatcher)线程放在有界阻塞队列和线程池之前。派发器阻塞在socket上等待新的连接,然后把连接加入有界到阻塞队列中。超过队列大小的连接将被丢弃,但是已经接收的连接带来的延迟是可以预测的。线程池中的线程取出队列中的请求,这些请求将被处理得到响应。

   不幸的是,连接和线程之间一直存在着一对一的关系。长时间存活的连接,例如Keep-Alive的连接会引起线程池中一大堆工作线程处于闲置状态。例如文件系统访问,网络等等。除此之外,成百上千个并发线程浪费了内存中一大堆 栈空间。

事件驱动架构

   事件驱动的方式可以将线程从连接中分离出来,只将线程用来处理指定回调上的事件或者处理器。
   一个事件驱动架构由事件创建者和事件消费者组成。事件创建者,是事件的来源,它只知道事件发生了。事件消费者是那些需要知道事件已经发生的实体。它们可能参与到处理事件中或者可能只是简单地受事件的影响。

Reactor 模式

  reactor模式是事件驱动架构的一种实现技术。简单来说,它使用一个单线程的事件循环阻塞在产生资源的事件上,并且将它们派发给相应的处理器和回调函方法上。

  没有必要阻塞在I/O上,只要事件的处理器和回调已经注册好了来处理它们。事件指向一些实例比如一个新进来的准备好读或者准备好写的连接,等等。在多核环境中,那些处理器或者回调可能会使用一个线程池。

  这种模式将模块化的应用水平的代码从可复用的reactor实现中解耦了出来。

  在Reactor模式架构中有两个重要的参与者:

1.Reactor

  一个Reactor 运行在一个独立线程,它的工作是通过将任务派发给合适的处理者来给IO事件做出响应。它像一个公司的电话接线员,回复客户的来电并且将线路转接给合适的联系人。

2.Handlers

   处理器完成处理IO事件的真正工作,像是公司里客户想要找的实际工作人员。

一个响应器通过派发合适的处理器来响应IO事件。处理器做非阻塞的操作。

Reactor 模式的意图

   Reactor架构模式允许将事件驱动应用于多路分配和派发来自于一个或者多个客户端发送到一个应用的服务请求。

   reactor 将不断的寻找事件,一旦事件得到了触发将通知相应的事件处理器去处理。

The Reactor Pattern is a design pattern for synchronous demultiplexing and order of events as they arrive.

Reactor 模式是一种设计模式,用来处理同步多路分配和事件按照顺序到达(翻译不准。。。)

它接收来自于多个并发客户端的消息,请求和连接,使用事件处理器顺序的处理这些请求。Reactor设计模式的目的是避免为每一个消息,请求,连接创建一个线程的常见问题。然后它从一批处理器中获取事件,将这些事件有序的派发给相应的事件处理器。

简单来说,服务端需要处理超过1万个客户端并发连接,使用tomcat,jboss里的线程没法处理相应规模的连接。

所以,应用程序使用reactor 只需要一个线程处理同时产生的事件。

基本上,标准的Reactor允许一个领导应用处理同时产生的事件,同时保持单个线程的简易性。

多路分配器是一种回路,有一个输入多个输出。它是一个回路当你想发送信号给多个设备中的一个设备。

这种描述听起来类似于解码器的描述,解码器是用于在多个设备中选择,而一个多路分配器用于在多个设备中发送一个信号。

Reactor允许使用一个独立的线程处理多个阻塞地等待被处理的任务。Reactor也管理一个事件处理器的集合。当被唤起处理任务事,它连接可用的处理器并且使它活跃。

事件循环:

  1)找到所有活跃的和解锁的处理器 或者将这事情委托给一个分发器实现。

  2)有序地执行每个处理器直到完成为止,或者到达他们被阻塞的一个点。已经完成的处理器是无效的,允许继续事件循环。

  3)从步骤1开始循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值