Redis 单线程模型分析

信息发布:Java 发布日期:2016-08-22 16:41 热度:622 分享到:

Redis  采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。

题外话,服务端编程的3大性能杀手:

1、大量线程导致的线程切换开销。

2、各种锁。

3、非必要的内存拷贝。

不过,因为一般的内存操作都是简单存取操作,线程占用时间相对较短,主要问题在io上,因此, redis  这种模型是合适的,但是如果某一个线程出现问题导致线程占用很长时间,那么 reids  单线程  模型效率可想而知。

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

  • 绝大部分请求是纯粹的内存操作(非常快速)
  • 采用单线程,避免了不必要的上下文切换和竞争条件
  • 非阻塞IO

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

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

关于线程安全问题

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

本文主题

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

¥我需要走的更远,点击我 赞助。 如果还有疑问,点击我加群,为你提供最好的解答。


工具导航地图

 
Nodejs + socket Demo 赞助二维码 赞助名单 百度口碑点赞 查看QQ群美女帅哥 点击加QQ群 听音乐 开启弹幕 X
反馈意见