Redis为什么单线程还那么快?
为什么单线程还那么快?
-
首先,单线程是指,Redis 的网络 IO和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程
-
Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。
为什么用单线程?
多线程的开销
多线程虽然可以增加系统吞吐率,或增加系统扩展性
But!如果没有良好的系统设计,其性价比就不高了
原因是——系统中通常会存在被多线程同时访问的共享资源,比如一个共享的数据结构,这就需要额外的开销维护正确性。
即便多线程,但没有精细的设计,只是简单的互斥锁,就会出现不理想的状况,并行变串行,与其这样不如直接单线程
单线程为什么快?
-
首先,大部分操作内存中完成,
-
加上高效的数据结构,如哈希表和跳表,
-
然后,Redis 采用了多路复用机制,使其在网络 IO 操作中能并发处理大量的客户端请求,实现高吞吐率
基于多路复用的高性能I/O模型
在 Redis 只运行单线程的情况下,该机制允许内核中,同时存在多个监听套接字和已连接套接字。内核会一直监听这些套接字上的连接请求或数据请求。一旦有请求到达,就会交给 Redis 线程处理,这就实现了一个 Redis 线程处理多个IO 流的效果。
为了在请求到达时能通知到 Redis 线程,select/epoll 提供了基于事件的回调机制,即针对不同事件的发生,调用相应的处理函数。
-
就像病人去看病,每个病人(请求)都需要先分诊、测体温、登记,这些工作显然不能让医生来做,分诊台会完成他们(类似Linux内核监听请求)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律