skynet框架:量级可控的定时任务管理模块
存在业务玩法,在单个场景内大量使用定时事件用于触发数据更新。
skynet的定时器模块实现已经非常高效,一般不必太担心性能问题,事实上玩法的初版实现正是直接使用框架定时器处理触发。几个方面是期望做得更好的:
- 减少外部消息。框架的定时事件是通过消息机制通知到指定service的,而单位时间内能处理的外部消息数量是有限的;
- 支持取消定时事件。
- 按业务区分定时事件,以支持业务数据分析和阈值告警;
这里讨论一个优化方案;
业务层实现一个定时任务管理模块(crontab),支持业务玩法注册通知任务,使用框架timeout驱动,定时通知crontab进行处理,单次通知消费完所有timeout任务(当前帧)。模块实现:
- 单service只使用唯一的skynet.timeout驱动,确保框架定时器消息在单位时间内量级可控;
- 模块对象需要是单例(singleton);
- 支持业务向模块注册/暂停/取消定时任务;
- 单次定时通知处理的任务数量支持阈值告警,这里将量级评估交给业务层负责;
- 高可用设计,比如任务执行中trackback、单帧处理任务数量overload、任务回调函数热更等情况需要保证模块稳定且有效
本文来自博客园,作者:linxx-,转载请注明原文链接:https://www.cnblogs.com/linxx-/p/18091058