读懂才会用 : Redis 的多线程
2020.5.2日,Redis 6.0.1正式发布。除了增加新功能和新的API,支持多线程是最大变化。本文以简化的方式理解Redis线程模型的演进。
Redis单线程
严格讲,Redis 并不是单线程。有后台线程在工作,处理一些较为缓慢的操作,例如无用连接的释放、大key的删除等。client端命令的请求获取 (socket 读)、解析、执行、内容返回 (socket 写) 都是由一个线程处理,因此我们常说的“单线程”指的是处理核心处理的线程只有一个。
处理流程
如下图:
Redis采用evport,epoll,kqueue和select四种方式实现多路复用,提升链接处理,Linux平台默认是epoll
参考ae.c文件L47
优点 VS 缺点
优势:
1、不存在锁的问题
2、避免线程间CPU切换
缺点:
1、单线程无法利用多CPU
2、串行操作,某个操作“出问题”会“阻塞”后续操作
Redis 6 多线程
处理流程
默认并不开启多线程,需要参数设置,IO_THREADS_MAX_NUM 最大为128
network.c文件 L2886
加入队列
network.c文件L3040
基础类图
优点 VS 缺点
优点:
1、提高响应速度,充分使用CPU
缺点:
1、增加了代码复杂性
总结
Redis的多路复用技术,支持epoll、kqueue、selector
5.0版本及以前,处理客户端请求的线程只有一个,串行处理
6.0版本引入了worker Thread,只处理网络IO读取和写入,核心IO负责串行处理客户端指令
关注我
如果您在微信阅读,请您点击链接 关注我 ,如果您在 PC 上阅读请扫码关注我,欢迎与我交流随时指出错误
版权声明: 本文为 InfoQ 作者【小眼睛聊技术】的原创文章。
原文链接:【http://xie.infoq.cn/article/91ab6a27e9bca957cab2d1819】。文章转载请联系作者。
评论 (1 条评论)