1. Redis高性能IO模型

1.1. Redis为什么用单线程,Redis为什么那么快?

使用单线程原因:多线程开销大,涉及到上下文切换,为保证共享资源的正确性,需要额外的锁机制进行保障,带来了额外的开销,这就是多线程编程面临的共享资源并发访问控制问题,为了避免这些问题,Redis直接采用单线程模式。

Redis快的原因:

  • 单线程,避免了多线程的上下文切换开锁,共享资源并发控制开销
  • Redis大部分操作在内存中完成的
  • 高效的数据结构,使用一个全局哈希表,底层数据结构高效,如使用哈希表和跳表。
  • 多路复用机制的IO模型

1.2. 基于多路复用的高性能I/O模型

什么是IO多路复用 I/O多路复用(multiplexing)的本质是通过一种机制(系统内核缓冲I/O数据),让单个进程可以监视多个文件描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作

Linux中的IO多路复用机制是指一个线程处理多个IO流,就是我们经常听到的select/epoll机制,简单来说,就是Redis只运行单线程的情况下,该机制允许内核中,同时存在多个监听套接字和已连接套接字。内核会一直监听 这些套接字上的连接请求,或数据请求,一旦有请求到达,就会交给Redis线程处理,就实现了一个Redis线程处理多个IO流的效果。

基于Redis多路复用的IO模型

select/epoll提供基于事件的回调机制,事件放在事件队列里,Redis单线程不断处理事件队列,避免轮询浪费CPU资源。

1.3. 小结

Redis单线程是指它对网络IO和数据读写的操作采用一个线程,而采用单线程的一个核心原因是避免多线程开发的并发控制问题。单线程的Redis高性能的原因跟多路复用的IO模型密切相关,因为这避免了accept()和send()/recv()潜在的网络阻塞操作。

1.4. 总结

1、在Redis基本IO模型中,你觉得还潜在哪些性能瓶颈。

主要是阻塞操作对Redis单线程的性能影响,比如主线程在执行操作,任何耗时的操作,比如bigKey,全量返回等操作(引入的scan操作可以避免),都是潜在性能瓶颈。

2、Redis为什么是单线程的,Redis为什么这么快。

使用单线程原因:多线程开销大,涉及到上下文切换,为保证共享资源的正确性,需要额外的锁机制进行保障,带来了额外的开销,这就是多线程编程面临的共享资源并发访问控制问题,为了避免这些问题,Redis直接采用单线程模式。

Redis快的原因:

  • 单线程,避免了多线程的上下文切换开锁,共享资源并发控制开销
  • Redis大部分操作在内存中完成的
  • 高效的数据结构,使用一个全局哈希表,底层数据结构高效,如使用哈希表和跳表。
  • 多路复用机制的IO模型

3、

© gaohueric all right reserved,powered by Gitbook文件修订时间: 2021-12-08 23:22:22

results matching ""

    No results matching ""