Redis之IO模型(单线程和多线程)
redis的io模型。
redis客户端提交的各种请求是如何最终被redis处理的?redis处理客户端请求所曹勇的处理架构,称为Redis的IO模型。不同版本的Redis采用的IO模型是不同的。
单线程模型
对于Redis3.0及其以前的版本,redis的IO模型采用的就是纯粹的单线程模型,即所有客户端的请求全部由一个线程处理。

但是在redis6.0之前的单线程指的是网络IO和键值对读写是由一个线程万臣的。
优点:
- 1.可维护性高(因为是单线程模型)
- 2.性能高 不存在并发,读写情况,所以也就不存在执行顺序的不确定性。
- 3.不存在线程切换的开销(线程切换的开销还是很大的)
- 4.不存在死锁,不存在加锁/解锁
缺点:
- 1.单线程性能会受到影响
多线程模型
内存的响应时长(RT)100ns
Redis每秒处理的读写请求数量应该可以达到10的7次方次,也就是1kw次。
实际情况是,Redis每秒可以处理8W-11W的读写请求。

redis6.0引入了多线程指的是网络请求过程采用了多线程,而键值对的读写命令仍然是单线程处理的,所以redis依然是并发安全的。也就是只有网络请求模块和数据操作模块是单线程的,而其他的持久化、集群数据同步等,其实是由额外的线程执行的。
优点:
1.结合了多线程和单线程的优点,避开了他们的不足
缺点:该模型没有明显的不足
如果非要找其不足的话,并非是一个真正意义上的多线程。
因为真正主力任务的线程,仍是单线程,所以其多性能也是有影响的。
多路复用器的选择算法常见的有三种:select模型、poll模型、epoll模型
select模型的选择算法(数组):采用轮询的方式,但是效率有点慢
poll模型的选择算法(链表):采用的是轮询算法,该模型对客户端的就绪处理是有延迟的。
epoll模型的选择算法:采用的是回调方式。根据就绪事件发生后的处理方式的不同,又分为LT模型和ET模型。
本文来自博客园,作者:King-DA,转载请注明原文链接:https://www.cnblogs.com/qingmuchuanqi48/articles/16974471.html

浙公网安备 33010602011771号