天天看点

Redis采用的单线程+多路IO复用

为什么redis是单线程的?

首先并不是高性能服务器都是多线程来实现的,因为reids的核心就是数据在内存中,他单线程的去操作就是效率最高的。单线程可以避免上下文的切换和锁的竞争。

一次CPU上下文切换大概在1500ns左右。

从内存中读取1MB的连续数据,耗时大约250us,假设1MB的数据由多个线程读取了1000次,那么就有1000次时间上下文切换。那么就有1500ns *1000 = 1500us, 在对比单线程下的250us,结果不言而喻。

但是在redis6.0以后,采用了多路IO复用来提高性能,

多路IO复用只用来处理网络数据的读写和协议解析,命令的执行仍旧是单线程。

Redis采用的单线程+多路IO复用