Redis 设计与实现---第十章:事件

文件事件:redis通过套接字与客户端进行连接,文件事件就是服务器对套接字操作对象的抽象,服务器与客户端他通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络通讯操作。

Reds基于Reactor模式开发了自己的网络事件处理器:这个处理器被称为文件事件处理器(file event handler)

      文件事件处理器使用I/O多路复用程序来同时监听多个套接字

      当被监听的套接字准备好执行连接应答,读取,写入,关闭等操作,与操作相对应的文件事件就会产生,这时文件处理器就会调用套接字之前关联好的事件处理器来处理这些事件

虽然文件事件处理器以单线程方式运行,但通过I/O多路复用程序来监听多个套接字,文件事件处理器既实现了高性能的网络通讯模型,又可以很好地与redis服务器中其他同样以单线程运行的模块对接,这保持Redis内部单线程设计的简单性

Redis 设计与实现---第十章:事件_第1张图片

I/O多路复用的实现:

     reids包装了常见的select、epoll、evport、和kqueue这些常见的I/O多路复用库,并实现了相同的ApI,程序在编译时自动选择性能最高的

Redis 设计与实现---第十章:事件_第2张图片

事件类型:

       AE_READABLE 可读事件 和 AE_WRITABLE 可写事件,如果同时触发了可读和可写,那么服务器会先执行可读再执行可写

时间事件:如serverCron函数这样的需要在给定的时间点执行,这类操作抽象为时间事件

   包括:定时事件(返回值为AE_NOMORE),周期事件(返回值非AE_NOMORE),每个事件主要由三个属性组成:全局id,when 毫秒精度的unx时间戳,timeProc时间事件处理器,一个函数

   服务器将所有时间时间都放在一个无序链表中,按id排列,每当时间执行器执行时,遍历整个链表

Redis 设计与实现---第十章:事件_第3张图片

Redis 设计与实现---第十章:事件_第4张图片

Redis 设计与实现---第十章:事件_第5张图片

你可能感兴趣的:(redis)