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)单线程反而避免了多线程的频繁上下文切换带来的性能问题

相关推荐
java_heartLake6 小时前
PostgreSQL数据库参数调优实践
数据库·postgresql·调优
小小李程序员7 小时前
LRU缓存
java·spring·缓存
xnuscd7 小时前
Milvus概念
数据库·学习·mysql
代码欢乐豆7 小时前
软件工程第13章小测
服务器·前端·数据库·软件工程
Clown958 小时前
go-zero(十) 数据缓存和Redis使用
redis·缓存·golang
小gpt&8 小时前
实现qt拖拽显示或者播放
数据库·qt·音视频
望获linux8 小时前
在 ARM 平台上如何实现Linux系统的1秒启动
linux·服务器·开发语言·数据库·操作系统·嵌入式操作系统·arm平台
漫天转悠8 小时前
MySQL 七种JOIN连接详解
数据库·mysql
尘浮生9 小时前
Java项目实战II基于Java+Spring Boot+MySQL的智能停车计费系统(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·mysql·微信小程序·maven
quintin-lee9 小时前
PostgreSQL中的内存上下文管理
数据库·postgresql