其他
10 分钟阅读
•
967 字
+
499 词
单线程模型
为什么 Redis 是单线程的而不用多线程并行执行充分利用 CPU 呢?
多线程的弊端
单线程又什么好处?
- 不会因为线程创建导致的性能消耗;
- 避免上下文切换引起的 CPU 消耗,没有多线程切换的开销;
- 避免了线程之间的竞争问题,比如添加锁、释放锁、死锁等,不需要考虑各种锁问题。
- 代码更清晰,处理逻辑简单。
redis快的总结
- 纯内存操作,一般都是简单的存取操作,线程占用的时间很多,时间的花费主要集中在 IO 上,所以读取速度快。
- 整个 Redis 就是一个全局哈希表 ,他的时间复杂度是 O(1),而且为了防止哈希冲突导致链表过长, Redis 会执行 rehash 操作 ,扩充 哈希桶数量,减少哈希冲突。并且防止一次性 重新映射数据过大导致线程阻塞, 采用 渐进式 rehash。巧妙的将一次性拷贝分摊到多次请求过程后总,避免阻塞 。
- Redis 使用的是非阻塞 IO:IO 多路复用,使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件 ,Redis 采用自己实现的事件分离器,效率比较高。
- 采用单线程模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。
- Redis 全程使用 hash 结构,读取速度快,还有一些特殊的数据结构, 对数据存储进行了优化,如压缩表,对短数据进行压缩存储,再如,跳表,使用有序的数据结构加快读取的速度。
- 根据实际存储的数据类型选择不同编码