67、Redis线程模型,单线程快的原因

Redis线程模型,单线程快的原因

一、Redis线程模型

Redis基于Reactor模式开发了网络事件处理器,这个处理器叫做文件事件处理器file event handler。这个文件事件处理器,它是单线程的,所以 Redis 才叫做单线程的模型,它采用IO多路复用机制来同时监听多个Socket,根据Socket上的事件类型来选择对应的事件处理器来处理这个事件。可以实现高性能的网络通信模型,又可以跟内部其他单线程的模块进行对接,保证了 Redis 内部的线程模型的简单性。

文件事件处理器的结构包含4个部分:多个Socket,IO多路复用程席、文件事件分派器以及事件处理器(命令请求

处理器、命令回复处理器、连接应答处理器等)。

多个 Socket 可能并发的产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用程序会监听多个Socket,会将 Socket 放入一个队列中排队,每次从队列中取出一个 Socket 给事件分派器,事件分派器把 Socket给对应的事件处理器。

然后一个 Socket 的事件处理完之后,IO多路复用程序才会将队列中的下一个 Soket 给事件分派器。文件事件分派器会根据每个 Socket 当前产生的事件,来选择对应的事件处理器来处理。

二、单线程快的原因

1)纯内存操作

2)核心是基于非阻塞的IO多路复用机制

3)单线程反而避免了多线程的频繁上下文切换带来的性能问题

相关推荐
咖啡の猫1 小时前
数据库的基本概念
数据库
小卓笔记2 小时前
keepalived应用
linux·服务器·数据库
八股文领域大手子3 小时前
Leetcode32 最长有效括号深度解析
java·数据库·redis·sql·mysql
鹏神丶明月天4 小时前
mybatis_plus的乐观锁
java·开发语言·数据库
极客代码4 小时前
Unix 域套接字(本地套接字)
linux·c语言·开发语言·unix·socket·unix域套接字·本地套接字
SelectDB技术团队4 小时前
天翼云:Apache Doris + Iceberg 超大规模湖仓一体实践
大数据·数据库·iceberg·doris·数据湖·湖仓一体·天翼云
zhuyasen4 小时前
在Go语言中的Redis缓存与本地内存缓存实战示例
redis·go·memcached
江湖有缘6 小时前
华为云之MySQL数据的导入导出实践【玩转华为云】
数据库·mysql·华为云
PersistJiao6 小时前
将数据添加到 Couchbase 的 Analytics(分析)服务
数据库·couchbase
java干货仓库6 小时前
Redisson 加锁和释放锁底层是怎么实现的?
java·redis