Redis的事件处理机制是怎样的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2309个文字,预计阅读时间需要10分钟。
Redis的事件处理机制与单线程模型,不同于Nginx的多进程和多线程,也与golang的多协程不同。工作的人那么少,为什么Redis能这么快呢?
原因在于epoll的多路复用技术。这里重点要说的是epoll。
redis是单进程,单线程模型,与nginx的多进程不同,与golang的多协程也不同,“工作的工人”那么少,可那么为什么redis能这么快呢?
epoll多路复用这里重点要说的就是redis的IO编程模型,首先了解下
为什么要有多路复用呢?
如果没有多路复用,一个线程只能监听一个端口的一个连接,这样这个效率比较低。当然我们有几种办法可以破除这个,一个是使用多线程模型,我们还是监听一个端口,但是一个请求进来,我们为其创建一个线程。但是这种消耗是比较大的。所以我们一直想办法,有没有办法一个线程监听多个端口,或者多个一个端口的多个连接(fd)。
这里再说说fd, 文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作(包括网络socket操作)的系统调用都通过文件描述符。每个连接请求上来,都会创建一个连接套接字,一个连接使用一个连接套接字。
对于监听端口,我们会有一个监听套接字,对应监听fd。我们所有的监听业务都是从监听这个套接字开始的。
本文共计2309个文字,预计阅读时间需要10分钟。
Redis的事件处理机制与单线程模型,不同于Nginx的多进程和多线程,也与golang的多协程不同。工作的人那么少,为什么Redis能这么快呢?
原因在于epoll的多路复用技术。这里重点要说的是epoll。
redis是单进程,单线程模型,与nginx的多进程不同,与golang的多协程也不同,“工作的工人”那么少,可那么为什么redis能这么快呢?
epoll多路复用这里重点要说的就是redis的IO编程模型,首先了解下
为什么要有多路复用呢?
如果没有多路复用,一个线程只能监听一个端口的一个连接,这样这个效率比较低。当然我们有几种办法可以破除这个,一个是使用多线程模型,我们还是监听一个端口,但是一个请求进来,我们为其创建一个线程。但是这种消耗是比较大的。所以我们一直想办法,有没有办法一个线程监听多个端口,或者多个一个端口的多个连接(fd)。
这里再说说fd, 文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作(包括网络socket操作)的系统调用都通过文件描述符。每个连接请求上来,都会创建一个连接套接字,一个连接使用一个连接套接字。
对于监听端口,我们会有一个监听套接字,对应监听fd。我们所有的监听业务都是从监听这个套接字开始的。

