为什么redis是单线程的?
首先并不是高性能服务器都是多线程来实现的,因为reids的核心就是数据在内存中,他单线程的去操作就是效率最高的。单线程可以避免上下文的切换和锁的竞争。
一次CPU上下文切换大概在1500ns左右。
从内存中读取1MB的连续数据,耗时大约250us,假设1MB的数据由多个线程读取了1000次,那么就有1000次时间上下文切换。那么就有1500ns *1000 = 1500us, 在对比单线程下的250us,结果不言而喻。
但是在redis6.0以后,采用了多路IO复用来提高性能,
多路IO复用只用来处理网络数据的读写和协议解析,命令的执行仍旧是单线程。