终于给Silly的定时器增加了取消功能

💡 原文中文,约3600字,阅读约需9分钟。
📝

内容提要

silly是一个基于Lua的高并发网络框架,最近为了增加etcd支持,作者决定给定时器增加取消功能。作者使用内存池解决session到node指针的映射问题,通过计算偏移量反向推理出对应的node指针的值。作者优化了代码,减少闭包的创建,降低代码重复度,并优化性能。

🎯

关键要点

  • silly是基于Lua的高并发网络框架,定时器采用类似Linux内核时间轮的方式实现。
  • 作者决定为定时器增加取消功能,以简化超时逻辑的实现。
  • 实现定时器取消功能需要高效的数据结构来根据session找到对应的node指针。
  • 作者考虑使用内存池来解决session到node指针的映射问题,避免使用哈希表的复杂性。
  • 通过计算node指针的偏移量来生成唯一的session,从而实现反向推理。
  • 内存池的扩容方式选择影响实现复杂度,作者选择将内存池抽象为page数组。
  • 在session计算中增加version字段,以便于管理node的版本和避免bug。
  • 优化后,定时器的使用方式简化,减少了代码重复度,提高了性能。
  • 作者维护了一个timer_user_data数组,以优化用户数据的管理,避免频繁的rehash。
➡️

继续阅读