Redis是单线程模型,它内部采用了文件事件处理器filter event handler,而这个处理器是单线程的。
文件事件处理器包含:
- 多个socket、
- IO多路复用程序、
- 事件分派器、
- 事件处理器(连接应答处理器、事件请求处理器、事件回复处理器)。
流程:
IO多路复用程序会监听多个socket,当socket产生事件后,会将socket放入一个队列中,事件分派器每次取出一个事件再分给不同的处理器进行处理。
Q:为什么Redis是单线程的还可以支持高并发?
1.它是纯内存操作
2.它的核心是非阻塞的IO多路复用机制,这个机制只负责监听socket,然后将产生事件的socket压入队列中。不会对这个事件进行处理,是非阻塞的。
3.避免了多线程带来的频繁的上下文切换问题