【源码分析】redis网络通讯并发架构简介
来源:互联网 发布:手指泡水起皱 知乎 编辑:程序博客网 时间:2024/05/18 23:26
我记得有一阵子Redis以不可阻挡之势火了起来,大家都说它的性能很高,单位时间内能处理大量请求。于是我很有兴趣知道它是怎么处理网络并发的。这篇文章适合想研究Redis代码而不知从何入手的朋友,并没有展现很多的细节,只对Redis的网络通讯做了一个系统性的介绍。文章分成两部分,第一部分是对Redis所用的事件驱动模型的原理的讲解,第二部分采用跟踪关键代码的形式去探究客户端-服务端是怎么使用这个框架进行通讯的。
第一部分:Redis的事件驱动模型
这个部分只需要看3个源文件:
ae.h、ae.c — 定义并实现了一个事件驱动的反应器(什么是反应器下文详解),ae具体代表什么我也不知道,
我猜的话大概,a:asynchronous,e:event
ae_epoll.c — 用系统API实现了反应器所用到的底层I/O功能
注:其实跟ae_epoll.c同样功能的还有ae_evport.c 、ae_kqueue.c 、ae_select.c 3个源文件,对应不同的系统API。因为epoll比较通用,所以这里用epoll做例子
接下来解析一下反应器的工作原理:
反应器有三个要素:事件集合、回调函数、单线程
他们的关系如图所示:
反应器维护一个事件集合,用户向反应器注册事件时,声明该文件描述符关注的事件类型,并设置回调函数,等该事件就绪时,由主线程调用该回调函数
程序主体是一个事件循环,使用多路复用技术处理多个读写请求以及定时器事件
第二部分 应用Redis事件驱动模型的一般通讯流程
2.1 启动消息循环
2.2 客户端连接
2.3 获取请求并回复
总结
Redis自己实现了一个反应器,使用多路复用技术处理并发的读写事件和定时器事件,单线程避免了线程切换的开销和互斥量的等待时间,这些设施对Redis的性能大有裨益。
- 【源码分析】redis网络通讯并发架构简介
- redis源码分析(六)- anet网络通讯的封装
- redis源码分析(七)- 网络通讯协议(networking.c)
- 网络通讯框架-Volley源码分析(1)
- 网络通讯框架-Volley源码分析(2)
- 网络通讯框架-Volley源码分析(3)
- 网络通讯框架-Volley源码分析(4)
- redis源码分析笔记1-简介和性能
- redis 源码简介he
- 分析Redis架构设计
- 分析Redis架构设计
- 分析Redis架构设计
- 分析Redis架构设计
- 分析Redis架构设计
- 分析Redis架构设计
- 分析Redis架构设计
- 分析Redis架构设计
- 分析Redis架构设计
- 获取APP的请求接口
- [编程题] 汽水瓶
- ListView问题总结
- 使用Strongswan搭建IPSec/IKEv2 VPN
- Infragistics控件对UltraWebGrid单元格编辑进行控制及样式设置
- 【源码分析】redis网络通讯并发架构简介
- poj1146全排列问题
- 1798: [Ahoi2009]Seq 维护序列seq 线段树
- php之上传图片(可预览,限制大小,加水印等)
- 正则表达式简单语法规则和IOS的使用
- 十年,我终于离开了360
- linux输入子系统之按键驱动
- 关于unity安装简单说几句
- 从焊接角度谈画PCB图时应注意哪些问题?