# timewheel **Repository Path**: StormAX/timewheel ## Basic Information - **Project Name**: timewheel - **Description**: 参考muduo实现的简单的时间轮 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-22 - **Last Updated**: 2024-08-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # timewheel 时间轮实现 ![](timewheel.png) * 时间轮使用一个队列进行存储,每个队列对象都是一个set集合作为Bucket; * 每次tick动作都会使队首的元素出队,并新建一个新的Bucket加入队列,每当新的事件到达时,就会加组队尾的Bucket中,因此该时间轮并不是一个精确的时间轮; * 队列的长度为用户设置的最大长度,表示时间轮进行多少个tick之后,事件就应该超时; * 使用set存储shared_ptr是为了享受引用计数带了便利性,由标准库维护了对象的使用情况,不用应用层代码再去创建引用计数,当事件超时后,Bucket对象弹出队列,Bucket中的所有shared_ptr会检查自己的引用计数,use_count为0则会析构; * 当析构函数调用后,Entry的析构函数中注册了业务处理函数,会操作相关的实例满足用户的自定义需求; * context中保持了所有Entry的弱引用,为了当事件再次到达时,将弱引用转换成强引用,再次加入时间轮。此外,使用强引用会导致引用计数不会为0,因此只能为弱引用,当Entry析构时,也需要将弱引用在map中清除。