Redis单线程为什么那么快

1.redis设计

简单来说:redis是分布式高性能的key-value的内存数据库,采用单线程设计,多路复用I/O。

基于内存的键值对存储,时间复杂度o(1),速度快。

基于单线程设计:

(1)没有创建线程、销毁线程带来的消耗

(2)避免了上线文切换导致的 CPU 消耗

(3)避免了线程之间带来的竞争问题,例如加锁释放锁死锁等等

异步非阻塞IO:处理快,并发能力强。

2.单线程为什么这么快?

计算机主存(内存)可看作一个由 M 个连续的字节大小的单元组成的数组,每个字 节有一个唯一的地址,这个地址叫做物理地址(PA)。早期的计算机中,如果 CPU 需要 内存,使用物理寻址,直接访问主存储器。

这种方式有几个弊端:

1、在多用户多任务操作系统中,所有的进程共享主存,如果每个进程都独占一块物 理地址空间,主存很快就会被用完。我们希望在不同的时刻,不同的进程可以共用同一 块物理地址空间。

2、如果所有进程都是直接访问物理内存,那么一个进程就可以修改其他进程的内存 数据,导致物理地址空间被破坏,程序运行就会出现异常。 为了解决这些问题,我们就想了一个办法,在 CPU 和主存之间增加一个中间层。CPU 不再使用物理地址访问,而是访问一个虚拟地址,由这个中间层把地址转换成物理地址, 最终获得数据。这个中间层就叫做虚拟存储器(Virtual Memory)。

在每一个进程开始创建的时候,都会分配一段虚拟地址,然后通过虚拟地址和物理 地址的映射来获取真实数据,这样进程就不会直接接触到物理地址,甚至不知道自己调 用的哪块物理地址的数据。 目前,大多数操作系统都使用了虚拟内存,如 Windows 系统的虚拟内存、Linux 系 统的交换空间等等。Windows 的虚拟内存(pagefile.sys)是磁盘空间的一部分。 在 32 位的系统上,虚拟地址空间大小是 2^32bit=4G。在 64 位系统上,最大虚 拟地址空间大小是多少?是不是 2^64bit=1024*1014TB=1024PB=16EB?实际上没 有用到 64 位,因为用不到这么大的空间,而且会造成很大的系统开销。Linux 一般用低 48 位来表示虚拟地址空间,也就是 2^48bit=256T。

总结:引入虚拟内存,可以提供更大的地址空间,并且地址空间是连续的,使得程 序编写、链接更加简单。并且可以对物理内存进行隔离,不同的进程操作互不影响。还 可以通过把同一块物理内存映射到不同的虚拟地址空间实现内存共享。

 

redis是采用单线程的,redis官网说redis使用单线程足以,它的性能瓶颈在于内存和网络带宽。假如使用多线程那么就需要不停地进行上下文切换,多线程还会涉及线程安全问题,那么还需要加锁。这样一来,使用多线程会给性能带来多大的提升就不得而知了,而单线程足以满足那就首选单线程。

redis基于多路IO复用原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值