1. Reactor模式
[url=http://en.wikipedia.org/wiki/Reactor_pattern]Reactor模式[/url](反应器模式)是一个事件处理模式,用来处理并发的服务请求,将一个或多个客户的服务请求分离(demultiplex),然后分发(dispatch)给处理器(request handler)。
Reactor模式如图所示
[img]https://img-my.youkuaiyun.com/uploads/201207/19/1342687408_4917.jpg[/img]
实现
如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模式
[url=http://developer.51cto.com/art/201112/306489.htm]Java NIO的多路复用及reactor[/url]
[url=http://ifeve.com/netty-reactor-4/]Netty源码解读(四)Netty与Reactor模式[/url]
[url=http://www.oschina.net/question/16_9863]Netty实现原理浅析[/url]
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相关的资料,方便大家下载收藏研究。
[url=http://en.wikipedia.org/wiki/Reactor_pattern]Reactor模式[/url](反应器模式)是一个事件处理模式,用来处理并发的服务请求,将一个或多个客户的服务请求分离(demultiplex),然后分发(dispatch)给处理器(request handler)。
Reactor模式如图所示
[img]https://img-my.youkuaiyun.com/uploads/201207/19/1342687408_4917.jpg[/img]
实现
如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模式
[url=http://developer.51cto.com/art/201112/306489.htm]Java NIO的多路复用及reactor[/url]
[url=http://ifeve.com/netty-reactor-4/]Netty源码解读(四)Netty与Reactor模式[/url]
[url=http://www.oschina.net/question/16_9863]Netty实现原理浅析[/url]
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相关的资料,方便大家下载收藏研究。