AMPS:定时器管理
定时器模块是协议服务器的关键组件之一,几乎每个协议软件都设计有超时机制。在多线程的软件中,定时器的最大问题是去除了异步,这使得保护每个会话相关的数据结构变得不可避免。APMS提供了基本的定时器管理API,主要的设计目标如下:
定时器实现必须高效,在定时器相关的任何操作中不应该有查找或排序。且启动、停止、超时处理必须的时间复杂度必须为O(1)。 定时器实现必须可测量,必须支持长时间的超时(至少支持24小时或更长),且占用内存小。 定时器回调函数必须串行调用,以避免维护共享会话相关的数据结构。 定时器必须精确。 AMPS的定时器实现满足了以上所有目标,下面描述它的设计: AMPS的定时器模块 AMPS将定时器视为高优先级的事件,时钟滴答事件每k毫秒产生一次,k为定器模块的最小计时单位,默认为1毫秒。系统中有一个高优先级的线程(优先级高于主循环线程、I/O代理、CPU代理),这个线程休眠k毫秒后,会唤醒并通过IPC机制向主程序发送一个事件,然后继续休眠k毫秒。主程序的事件管理器以高于系统中其他事件的优先级来处理这一个时钟滴答事件。并且处理完任何事件后,它都会检查时钟滴答事件来判断是否此事件处理超过了k毫秒,这种方法可以保证时钟滴答事件不用等待其他事件的处理。并且可以判断系统中有哪些事件处理超过了k毫秒,这样应用程序开发者就可以发现这样的事件处理句柄,并将它拆分成多个小于k毫秒的事件,定时器提供了一个API,允许用户指定一个回调函数以及一个作为参数传入的指针。