zoukankan      html  css  js  c++  java
  • Redis为什么是单线程还支持高并发

    Redis为什么设计成单线程模式
    因为redis是基于内存的读写操作,所以CPU不是性能瓶颈,而单线程更好实现,所以就设计成单线程模式

    单线程模式省却了CPU上下文切换带来的开销问题,也不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。

    单线程为什么快
    完全基于内存的操作。
    redis特有的数据结构,对存储数据做了优化,使访问更加简单高效
    多路IO复用
    多路IO复用:这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗);

    redis虽然是单线程的,但是可以处理并发连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,使并发称为可能。

    单线程为什么快还支持高并发
    基于以上所有redis有以下几个优势:

    完全基于内存操作,加上其特有的数据结构(优化的数据结构)使得其访问速度非常快。
    单线程模式单省却了CPU上下文切换带来的开销问题,也不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。
    多路IO复用,使其可以可以高效的处理多个连接请求,既支持了高并发,同时也减少了网络IO的消耗时间。
    Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大
    单线程的劣势及解决方案
    无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善;

  • 相关阅读:
    MyEclipse Tern was unable to complete your request in time
    12.5.2 访问被覆盖的方法
    猎头、培训与咨询的价值(2)【补1】——北漂18年(93)
    12.5.1 通过 @ISA 继承
    从柯洁对战AlphaGo,看商业智能
    jquery ajax POST 例子详解
    利用组合索引优化
    Oracle range 分区表
    Perl 面向对象上
    JSON导出CSV中文乱码解决方案
  • 原文地址:https://www.cnblogs.com/lm970585581/p/13220331.html
Copyright © 2011-2022 走看看