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相关的资料,方便大家下载收藏研究。
分享到:
相关推荐
Redis是一款高性能的键值对数据库,其内部使用了许多优化的数据结构来存储数据,其中ziplist是Redis为了节省内存而设计...在阅读Redis源码时,深入分析ziplist的实现细节将有助于我们更好地理解和调试Redis的内存管理。
`bitfieldtest.c`可能是Redis源码中用于测试位字段(bitfield)功能的代码。位字段允许在单个字符串对象中高效存储和操作单个比特,这对于节省内存和执行位操作非常有用。测试文件通常包含了各种边界条件和异常情况...
本篇笔记将聚焦于Redis源码中的“sds”(Simple Dynamic Strings,简单动态字符串)部分,这是Redis中处理字符串的基础数据结构。 首先,我们要明白sds是什么。在C语言中,字符串是以字符数组的形式存在的,而sds是...
### Redis基础配置笔记 #### 一、Redis简介 Redis 是一款开源且采用 BSD 许可证的高级键值存储系统。由于它支持多种数据结构,如字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)以及有序集合...
我在之前阅读源码的同时也发现了很多变化的地方,在此把已经发现的列举出来,不过肯定是不全的,因为我还没读完(逃跑~)。等再发现新的值得一聊的,并且能凑够一篇文章的内容的话,我会再继续写一篇的。
概念:Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。 特征: 1、数据间没有必然的关联关系 2、内部采用单线程机制进行工作 3、高性能。 4、多数据类型支持: ...
SSM实战项目——Java高并发秒杀API是一个深入学习Java后端开发的重要实践,它涵盖了Spring、SpringMVC和MyBatis三大框架的整合应用,以及如何处理高并发下的秒杀场景。在这个项目中,我们将深入理解如何设计并实现一...
**Redis实战教程——Java工程师视角** 本教程名为“javacourse-redis-in-action”,是针对Java工程师设计的一套深入浅出的Redis实战课程。旨在帮助Java开发者更好地理解和应用Redis这一高性能、键值存储系统,通过...
《个人知识管理系统的设计与实现——基于Java、Idea、Vue、Redis及Mybatis的技术实践》 个人知识管理系统是现代信息社会中,为了帮助用户高效管理、组织和分享知识而开发的一种软件工具。在这个系统中,用户可以...
### 偌依框架的使用学习笔记 #### 一、若依框架的介绍与说明 若依框架是一款基于Spring Boot、Spring Security、JWT、Vue和Element的全开源快速开发平台,旨在提供高效的前后端分离解决方案。它具备以下特点: 1....
│ │ 鲁班学院-上课笔记mybaits源码分析9-05.docx │ │ │ └─mybaits源码分析 │ mybaits源码分析.mp4 │ ├─面试必问-springcloud架构微服务项目 │ springcloud架构微服务项目.mp4 │ ├─面试必问-...
Docker —— 从入门到实践 - v1.0.pdf Dubbo部署文档.doc Dubbo面试专题.docx java后端面试题答案.pdf Java并发Fork-Join框架原理解析.docx JAVA核心知识整理.pdf JAVA核心知识点整理.pdf Java面试笔记.docx JAVA...
java8集合源码真棒明星 我自己的真棒清单! 生成者 [Jupyter 笔记本](#jupyter 笔记本) 动作脚本 - 长期废弃的 SWFUpload 项目的一个分支,由 WordPress 和其他人维护,以确保存在安全版本的 SWFUpload。 向 报告...
《SpringBootNote——让开发如虎添翼》 在IT行业中,SpringBoot已经成为了Java开发者构建微服务架构的首选框架,其简洁的配置、快速的启动以及强大的集成能力深受好评。"SpringBootNote",正如其名,是针对...
本项目——“Java基于SpringBoot的教学资料管理系统”旨在提供一个高效、便捷的平台,帮助管理员和用户对各类教学资源进行有效管理。下面将详细阐述系统的核心功能以及实现原理。 一、系统架构与技术选型 本系统...