003 Redis 的线程模型是什么?为什么Redis单线程却能支撑高并发?

读读Redis的官网,学第一手的资料:Redid官方文档地址

 Redis中国-文档网址:Redis中国-文档地址

或者看看书《Redis 深度历险: 核心原理和应用实践》


1、Redis的线程模型( Redis 的网络 IO 和键值对读写是由一个线程来完成)

redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才 叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列 中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器进行处理。

文件事件处理器的结构包含 4 个部分:
(1)多个 socket
(2)IO 多路复用程序
(3)文件事件分派器
(4)事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)

1.1 真的只有一个线程吗

我们通常说,Redis 是单线程,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程。但 Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。所以,严格意义上来说,redis并不是单线程。

1.2 单线程模型的高性能应用还有哪些

除了 Redis 之外,Node.js 也是单线程,Nginx 也是单线程,但是它们都是服务器高性能的典范。

2、为啥 redis 单线程模型效率也能这么高

(1)纯内存操作
(2)核心是基于非阻塞的 IO 多路复用机制
(3)单线程反而避免了多线程的频繁上下文切换问题

你可能感兴趣的:(08Redis,Redis,单线程模型,IO多路复用)