[发明专利]一种定时器事件的处理方法及装置有效
申请号: | 201510888890.9 | 申请日: | 2015-12-03 |
公开(公告)号: | CN105550023B | 公开(公告)日: | 2019-05-07 |
发明(设计)人: | 孔志强 | 申请(专利权)人: | 青岛海信移动通信技术股份有限公司 |
主分类号: | G06F9/48 | 分类号: | G06F9/48 |
代理公司: | 北京同达信恒知识产权代理有限公司 11291 | 代理人: | 黄志华 |
地址: | 266071 山*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 定时器 事件 处理 方法 装置 | ||
本发明公开了一种定时器事件的处理方法及装置,用以解决系统频繁的Timer事件所导致的系统效率低、功耗大的问题。该方法为:确定第一定时器事件的预期到期时间和最大允许延时时间,以及确定所述预期到期时间和所述最大允许延时时间所确定的时间区间;若确定事件列表中存在到期时间在所述时间区间内的定时器事件,选择所述事件列表中到期时间在所述时间区间内的第二定时器事件,将所述第一定时器事件的到期时间设置为所述第二定时器事件的到期时间;根据设置的到期时间,将所述第一定时器事件加入所述事件列表中。
技术领域
本发明涉及计算机技术领域,尤其涉及一种定时器事件的处理方法及装置。
背景技术
Linux操作系统早期通过周期性的节拍(TICK)实现操作系统调度,每秒钟的TICK数通过HZ进行定义,HZ表示用来定义每一秒有几次定时器中断,一般HZ为100,即每秒钟有100个TICK,通过10毫秒(ms)的定时器(Timer)实现周期性的TICK唤醒。该机制在系统没有任何事情需要处理时,也是每10ms有个Timer事件触发中断,导致系统进行没有必要的运行。
为了解决该问题,Linux中采用了NOHZ机制,该机制不采取周期性的TICK机制,而是根据系统的Timer事件设置Timer。
具体地,如图1所示,当需要定时功能时,定义一个数据结构Timer,并进行Timer事件初始化,以明确该Timer事件的到期时间(expires)和到期后的处理函数,并将该Timer事件加到系统的Timer事件列表中。系统对所有的Timer事件进行排序,到期时间最接近当前时间的Timer事件排在前面。在前一个Timer事件到时,获取下一个Timer事件的到期时间进行设置,即将下一个Timer事件的到期时间设置到硬件的定时器中,定时器时间到时后产生一个定时器中断,执行该Timer事件的处理函数。
但是,由于Linux内核中的Timer事件特别多,所有即便采用了NOHZ机制,系统仍然有频繁的Timer事件触发中断,相对于每10ms的周期性TICK,优化效果有限。
发明内容
本发明实施例提供一种定时器事件的处理方法及装置,用以解决系统频繁的Timer事件所导致的系统效率低、功耗大的问题。
本发明实施例提供的具体技术方案如下:
本发明实施例提供了一种定时器事件的处理方法,包括:
确定第一定时器事件的预期到期时间和最大允许延时时间,以及确定所述预期到期时间和所述最大允许延时时间所确定的时间区间;
若确定事件列表中存在到期时间在所述时间区间内的定时器事件,选择所述事件列表中到期时间在所述时间区间内的第二定时器事件,将所述第一定时器事件的到期时间设置为所述第二定时器事件的到期时间;
根据设置的到期时间,将所述第一定时器事件加入所述事件列表中。
较佳地,所述第一定时器事件属于非精确定时类型。
较佳地,将所述第一定时器事件加入所述事件列表中之后,所述方法还包括:
根据所述第一定时器事件的到期时间设置定时器,在所述定时器到时后,执行所述第一定时器事件的处理函数,以及执行所有与所述第一定时器事件的到期时间相同的所述第二定时器事件的处理函数。
较佳地,选择所述事件列表中到期时间在所述时间区间内的第二定时器事件,包括:
若确定所述事件列表中到期时间在所述时间区间内的定时器事件仅有一个,将所述定时器事件确定为所述第二定时器事件;
若确定所述事件列表中到期时间在所述时间区间内的定时器事件大于一个,选择在所述时间区间内到期时间最晚的定时器事件,将所述到期时间最晚的定时器事件确定为所述第二定时器事件。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于青岛海信移动通信技术股份有限公司,未经青岛海信移动通信技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510888890.9/2.html,转载请声明来源钻瓜专利网。