单线程

四季春风,不厌冬

  1. 选择单线程原因
  2. 高吞吐量原因
  3. 参考

  主要阐述两个问题:为什么Reids设计成单线程(网络部分)?为什么单线程支持高吞吐?

选择单线程原因

  • Redis基于内存操作,CPU不是Redis的瓶颈
  • 不需要去考虑各种锁的问题,不存在加锁释放锁操作
  • 不存在多进程或者多线程导致的切换而消耗CPU

高吞吐量原因

  • 数据结构简单
      Redis是key-value数据库,不是关系数据库,数据之间没有约束。   
  • 使用I/O多路复用技术,可以处理并发的连接
      当你的某个socket可读或者可写的时候,它可以给你一个通知。这样当配合非阻塞的socket使用时,只有当系统通知我哪个描述符可读了,我才去执行read操作,可以保证每次read都能读到有效数据而不做纯返回-1和EAGAIN的无用功。写操作类似。操作系统的这个功能通过select/poll/epoll/kqueue之类的系统调用函数来使用,这些函数都可以同时监视多个描述符的读写就绪状况,这样,多个描述符的I/O操作都能在一个线程内并发交替地顺序完成,这就叫I/O多路复用,这里的“复用”指的是复用同一个线程。

参考

本文作者 : pengqin.zhou
本文使用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
本文链接 : https://www.zhoupq.com/blog/%E4%B8%BA%E4%BB%80%E4%B9%88Redis%E5%8D%95%E7%BA%BF%E7%A8%8B%E6%94%AF%E6%8C%81%E9%AB%98%E5%90%9E%E5%90%90%EF%BC%9F/

本文最后更新于 天前,文中所描述的信息可能已发生改变