Redis到底是多线程还是单线程?

网上很多人认为Redis是单线程,但是根据其这么高的效率,然后用windows运行时查看任务管理器发现好像不止一个线程,所以求大神指点确认回答一下。
关注者
8
被浏览
3841
3 个回答

windows任务管理器查看的是进程吧。

从网上摘录了一部分:

总体来说快速的原因如下:

1)绝大部分请求是纯粹的内存操作(非常快速)

2)采用单线程,避免了不必要的上下文切换和竞争条件

3)非阻塞IO

内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间

这3个条件不是相互独立的,特别是第一条,如果请求都是耗时的,采用单线程吞吐量及性能可想而知了。应该说redis为特殊的场景选择了合适的技术方案。

关于线程安全问题

redis实际上是采用了线程封闭的观念,把任务封闭在一个线程,自然避免了线程安全问题,不过对于需要依赖多个redis操作的复合操作来说,依然需要锁,而且有可能是分布式锁。

如果想要深入学习redis的话,提供一套视频教程可以看一下:redis入门到精通视频教程-码源教程

首先,Redis官方并不支持Windows。你运行的应该是微软自己打补丁的版本,这个版本不能代表Redis的实际表现,因为微软的运行库有一些特殊的线程和IO机制。

其次,所谓服务端单线程应该这么理解,即多客户端并发连接的时候,服务器在同一个线程里处理这些请求。但并不是说服务器自己只准开一个线程,有一些线程/进程去处理其他非连接任务也是完全合理的。好像Redis后台持久化是用了额外的线程/进程,时间久了,记得不是很清楚。

单线程指的是网络请求模块使用了一个线程,其他模块用了多个线程。

可能因为用了异步IO模型,单线程的效率已经足够高了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值