0
点赞
收藏
分享

微信扫一扫

Vue入门需要了解的知识一(总结)

JamFF 2024-08-17 阅读 30

在这里插入图片描述
redis服务器是一个由事件驱动(死循环)的程序,它总共就干两件事:

  1. 文件事件:利用I/O复用机制,监听Socket等文件描述符发生的事件,如网络请求
  2. 时间事件:定时触发的事件,负责完成redis内部定时任务,如生成RDB文件、清除过期事件

redis事件api

  1. aeApiCreate:初始化I/O复用机制上下文环境

  2. aeApiAddEvent、aeApiDelEvent:增加或删除一个监听对象

  3. aeApiPoll:阻塞进程,等待事件就绪或给定事件到期

  4. aeEventLoop:redis事件循环器,负责管理事件

  5. aeFileEvent:存储一个文件描述符已注册的文件事件

  6. aeTimeEvent:存储一个时间事件的信息

  7. redis启动时创建的事件

    1. 初始化aeEventLoop属性
    2. aeApiCreate由I/O复用层实现,并初始化具体的I/O复用机制执行的上下文环境
  8. 监听TCP Socket,并指定函数处理

    1. 如果超出eventLoop.setsize限制,则返回错误
    2. aeApiAddEvent函数由I/O复用层实现,调用I/O复用函数添加监听事件对象
    3. 初始化aeFileEvent属性
  9. redis定时任务

    1. 初始化aeTimeEvent属性,计算下一次时间事件执行事件
    2. 头插到eventLoop.timeEventHead链表
  10. 事件循环器的运行

    1. 阻塞进程,等待文件事件就绪或时间事件到达执行事件
    2. 按规则计算进程最大阻塞时间
      1. 查找最先执行的时间事件,若有,则用该时间减去当前时间
      2. 检查是否AE_DONT_WAIT标志,若无则一直阻塞,若有,则不阻塞,轮询系统是否有就绪事件
    3. 进程阻塞前,执行beforeSleep函数
    4. aeApiPoll负责阻塞进程,直到有文件事件就绪或时间到期
    5. 进程阻塞后,执行afterSleep函数
    6. aeApiPoll返回已就绪的文件事件数量并处理
    7. 通常redis会优先处理read事件再处理write事件,以方便服务器尽快处理请求返回结果给客户端。aeApiAddEvent如果设置了优先处理write属性,则会优先处理write事件。
    8. 处理时间事件
  11. 处理时间事件

    1. 判断上一次执行事件的时间是否比当前时间大?若是就说明系统时间有问题,则将所有时间事件过期时间置为0提前执行,提前执行危害小于延后执行.
    2. 遍历时间事件
    3. 若事件已删除,则将其从链表中删除
    4. 若时间事件已经到了执行时间,则删除
    5. 处理下一个时间事件
举报

相关推荐

0 条评论