reactor模式学习

简介

reactor基于事件驱动的,它有一个或多个并发输入源,有一个Service Handler,和有多个Request Handlers。在这里插入图片描述
reactor模式是将一个请求通过Service Handler分发给event Handler
在这里插入图片描述

实现一个reactor,主要由以下几部分组成:
reactor:反应堆;主要功能:注册事件、移除事件、分发事件

  • EventHandler:事件,事件处理
  • SynchronousEventDemultiplexer:采集事件
  • ConcreteEventHandler:请求事件

这个案例分为服务端和客户端两个,

  • 服务端:服务端和普通linux上的服务程序是相同的,有客户端连接时,服务端会将标识符注册,并且不断检测fd的可读可写性,每2s向客户端发送时间
  • 客户端:客户端实现也是相同的,也是通过注册fd,然后并且不断检测fd的可读可写性,向服务
    端发送消息

reactor的优缺点

优点

  • 响应快,不必为单个同步时间所阻塞,虽然Reactor本身依然是同步的;
  • 编程相对简单,可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程/进程的切换开销;
  • 可扩展性,可以方便的通过增加Reactor实例个数来充分利用CPU资源;
  • 可复用性,reactor框架本身与具体事件处理逻辑无关,具有很高的复用性

缺点

  • 相比传统的简单模型,Reactor增加了一定的复杂性,因而有一定的门槛,并且不易于调试。
  • Reactor模式需要底层的Synchronous Event Demultiplexer支持,比如操作系统的select系统调
    用支持,如果要自己实现Synchronous Event Demultiplexer可能不会有那么高效。
  • Reactor模式在IO读写数据时还是在同一个线程中实现的,即使使用多个Reactor机制的情况下,那些共享一个Reactor的Channel如果出现一个长时间的数据读写,会影响这个Reactor中其他Channel的相应时间,比如在大文件传输时,IO操作就会影响其他Client的相应时间,因而对这种操作,则不合适使用reactor模式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值