1.Redis为什么是单线程?
Redis基于Reactor模式开发了网络事件处理器,这个处理器被成为文件事件处理器。它的组成结构为4部分:多个套接字,io多路复用程序,文件事件分派器,事件处理器。因为文件事件分派器队列的消费是单线程的,所以redis是单线程~~~~
Redis通过AE事件模型以及io多路复用的技术,处理性能非常高,因此没必要使用多线程。单线程使得Redis内部实现的复杂度大大降低,Hash的惰性Rehash,Lpush等等线程不安全的命令都可以无锁进行。
2.那什么是io多路复用?
一种经典的Reactor设计模式,也是异步阻塞io
多路指多个Socket连接,复用指复用一个线程,多路复用三种技术:select,poll,epoll。
epoll是最新最好的多路复用技术,采用多路I/O复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的消耗时间),且Redis在内存中操作数据的速度非常快,使得Redis具有高吞吐率
3.那什么是AE事件模型?
4.为什么Redis6.0之前没有引入多线程呢
因为引入后会带来并发读写的问题,增加系统复杂度,同时可能存在线程切换,甚至加锁解锁,死锁的性能消耗。
5.那为什么要引入多线程
Redis的瓶颈是内存和网络,不是cpu,如果使用cpu多核,可以搭建多个Redis实例来解决。
Redis4.0开始有多线程概念,比如Redis通过多线程方式在后台删除对象,以及通过Redis模块实现的阻塞命令。但网络性能优化才是大头。网络IO读写在Redis整个执行期间占用大量CPU,
使用Redis多线程的好处
1.可以充分利用服务器CPU资源,目前主线程只能利用一个核。
2.多线程可以分摊Redis同步IO读写负荷。
Redis6.0未默认开启多线程,需在conf配置。4 核的机器建议设置为 2 或 3 个线程,8 核的建议设置为 6 个线程,线程数一定要小于机器核数,尽量不超过8个。
网友评论