`
xpenxpen
  • 浏览: 723335 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

redis源码阅读笔记(10)——事件

阅读更多
1. Reactor模式
Reactor模式(反应器模式)是一个事件处理模式,用来处理并发的服务请求,将一个或多个客户的服务请求分离(demultiplex),然后分发(dispatch)给处理器(request handler)。
Reactor模式如图所示


实现
如c语言里有libevent,libev,以及redis自己实现的ae
c++语言里有boost的asio
java语言里有mina,netty,http core
javascript语言里的nodejs

另外还有Proactor模式,可以理解成是异步的Reactor模式。

2. Redis的实现
Redis 基于 Reactor 模式开发了自己的网络事件处理器: 这个处理器被称为文件事件处理器(file event handler)。
这部分代码技术含量高,难度也高。由于本人C语言菜鸟一个,所以无力阅读分析。
本人只打算从高层视角解读一下。

核心的是以下2个文件
ae.c
ae.h

然后以下是4种实现,可以任意切换。宏定义里定义了它们的优先级,这样最后运行起来可以选取一个性能最高的。
ae_epoll.c
ae_evport.c
ae_kqueue.c
ae_select.c

还有一些就是和网络有关的代码了,比较枯燥。
anet.c
anet.h
networking.c

3.java里的reactor模式
Java NIO的多路复用及reactor
Netty源码解读(四)Netty与Reactor模式
Netty实现原理浅析

4. 事件处理相关的模式
    Callback
    DOM events
    Event-driven programming
    Exception handling
    Interrupt handler
    Interrupts
    Observer pattern (e.g., Event listener)
    Reactor pattern vs. Proactor pattern
    Signal programming
    Virtual synchrony

5. 吐槽
轮子的确很多,好多语言,然后一种语言里也是百家争鸣。个人觉得还是java写出来的比较优雅,门槛相对也低些。
这部分属于redis里技术含量最高的代码之一了,而且就算java,这类代码也是技术含量很高的。如果有空,可以研究下netty相关的源码,对提高自己是很有好处的。

附件收集了一些和reactor相关的资料,方便大家下载收藏研究。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics