网上很多人认为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模型,单线程的效率已经足够高了。