Redis IO 多路复用机制

本文详细介绍了Redis中基于Linux的IO多路复用机制,包括select、poll和epoll的工作原理。epoll在处理大量文件描述符时表现出更好的性能,其边缘触发模式能提高效率,避免不必要的通知。文章还探讨了epoll相对于select的优势,如使用红黑树优化查找和添加操作,以及如何通过epoll_ctl和epoll_wait实现高效的数据监听与处理。
摘要由CSDN通过智能技术生成
Redis IO 多路复用机制
  • 基于linux select/epoll
    • select:最大支持1024个文件描述符,在描述符较多情况下性能较差,水平触发
    • poll:poll与select基本相同,只是没有文件描述符的限制
    • epoll:文件描述符为系统上限,在描述符较多情况下性能较好,同时支持水平与边缘触发
  • 内核可同时监听多个监听套接字和 多个已连接套接字
  • 一旦内核监听到套接字上有数据返回,立刻交给redis线程处理数据
水平触发
  • 只要文件描述符关联的读内核缓冲区非空,有数据可以读取,就一直发出可读信号进行通知
  • 当文件描述符关联的内核写缓冲区不满,有空间可以写入,就一直发出可写信号进行通知
  • 如果系统中有大量不需要读写的就绪文件描述符,而它们每次都会返回,这样会大大降低处理程序检索自己关心的就绪文件描述符的效率
边缘触发
  • 当文件描述符关联的读内核缓冲区由空转化为非空的时候,则发出可读信号进行通知
  • 当文件描述符关联的内核写缓冲区由满转化为不满的时候,则发出可写信号进行通知。
  • 如果这次没有把数据全部读写完(如读写缓冲区太小),它不会再次通知你
  • 直到该文件描述符上出现第二次可读写事件才会通知你
  • 这种模式比水平触发效率高,系统不会充斥大量不关心的就绪文件描述符
使用Linux epoll模型的水平触发模式
  • 当socket可写时,会不
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值