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、多数据类型支持: ...
前言我的年度计划新闻观影隨筆學编程其他JavaLeetCode 题解思维导图系列Redis 源码剖析系列春天遊戲我的博客我的公众号关于转发前言很早之前读过《Java编程思想》,用思维导图做笔记把思维导图的截图贴在了简书上,...
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。 向 报告...
Golang 指南「Golang 面试小抄」一份通向理想互联网公司的面试指南人性化超详细MD版本,一定给个STAR支持一下吧包括Golang基础、map、context、channel、GMP、锁、并发、GC、内存、Gin源码等Java、MySQL、Redis、MQ...
《SpringBootNote——让开发如虎添翼》 在IT行业中,SpringBoot已经成为了Java开发者构建微服务架构的首选框架,其简洁的配置、快速的启动以及强大的集成能力深受好评。"SpringBootNote",正如其名,是针对...
本项目——“Java基于SpringBoot的教学资料管理系统”旨在提供一个高效、便捷的平台,帮助管理员和用户对各类教学资源进行有效管理。下面将详细阐述系统的核心功能以及实现原理。 一、系统架构与技术选型 本系统...