目录
1. 阻塞IO
2. 非堵塞IO
3. IO多路复用
3.1 select
3.2 poll
3.3 epoll
4. 信号驱动IO
5. 异步IO
6. Redis是单线程还是多线程
Redis采用单线程模型,这意味着一个Redis服务器在任何时刻都只会处理一个请求。Redis的网络模型涉及到阻塞I/O(Blocking I/O)、非阻塞I/O(Non-blocking I/O)、I/O多路复用(I/O Multiplexing)、信号驱动I/O(Signal-driven I/O)以及异步I/O(Asynchronous I/O)。
1. 阻塞IO
- 在阻塞I/O模型中,当一个I/O操作发生时,整个进程会被阻塞,直到I/O操作完成为止。
- 在Redis的网络模型中,当执行一次命令或操作时,可能会涉及到与客户端的通信,这时Redis的主线程会被阻塞。
2. 非堵塞IO
- 在非阻塞I/O模型中,当一个I/O操作发生时,进程不会被阻塞,而是继续执行其他操作。进程需要通过轮询来检查I/O操作是否完成。
3. IO多路复用
- I/O多路复用允许单一的进程或线程管理多个套接字。通过select、poll、epoll等机制,可以同时监听多个套接字上的I/O事件。
- Redis使用了I/O多路复用来同时监听多个客户端连接的事件,这样单个线程可以处理多个连接。
3.1 select
3.2 poll
3.3 epoll
epoll
是Linux提供的最新、最高效的I/O多路复用机制。它引入了三个系统调用:epoll_create
(创建一个epoll
实例)、epoll_ctl
(注册或注销文件描述符)和epoll_wait
(等待事件的发生)。
4. 信号驱动IO
5. 异步IO
特点: 异步I/O允许一个I/O操作启动后,应用程序可以继续执行其他任务,而不必等待I/O操作完成。当I/O操作完成时(就绪和数据拷贝完成),应用程序会得到通知。