当前位置: 首页 > 图灵资讯 > java面试题> Redis真的是单线程吗?

Redis真的是单线程吗?

来源:图灵教育
时间:2024-03-14 13:10:53
 

所谓的redis线程其实指的是在网络IO和键值对读写时是通过一个线程完成的。而其他的一些模块比如说持久化存储、集群支撑模块这些都是多线程的。

那为什么网络操作模块和数据存储模块不用多线程呢?

其实非常简单,首先网络IO模块的性能瓶颈就不在CPU上,而是要提升我们的IO利用率,虽然使用多线程能带来一些提升,但是多线程也是存在一定的弊端的,首先是多线程模型下的共享资源和并发控制非常复杂,线程的上线文切换也会带来一定的性能损耗,所以Redis在这块采用的是IO多路复用。

另一方面,Redis的绝大部分操作都是在内存中完成的,内存操作本来就比硬盘读写快了百倍以上,并且在数据结构上也进行了大量的优化,比如hash表和跳表。而使用单线程还能避免多线程下的锁竞争,省去了线程的时间和性能开销也不会存在锁竞争的问题。