CN101957779A - 定时器的管理方法 - Google Patents
定时器的管理方法 Download PDFInfo
- Publication number
- CN101957779A CN101957779A CN 201010285242 CN201010285242A CN101957779A CN 101957779 A CN101957779 A CN 101957779A CN 201010285242 CN201010285242 CN 201010285242 CN 201010285242 A CN201010285242 A CN 201010285242A CN 101957779 A CN101957779 A CN 101957779A
- Authority
- CN
- China
- Prior art keywords
- timer
- time
- time period
- bit
- timer information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Computer And Data Communications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种定时器的管理方法,包括:按照毫秒级划分定时器的时间段,在内存中分别存储与各时间段相关联的互斥锁、标志位和定时器信息;对于每个时间段,所述互斥锁以信号量数值的形式存储,所述标志位以无符号短整型数值的形式存储,所述定时器信息以16个连续的内存块的形式存储,所述16个内存块中的每个都可以用于存储其所属时间段的一个定时器的定时器信息,所述标志位的每个bit位分别依序对应于16个内存块中的一个以标志每个内存块中的定时器信息的使用情况。本发明实现了毫秒级的实时定时器;(1)满足实时交易系统的毫秒级响应机制;(2)具有多线索大吞吐量的承载能力;(3)支持快速查找。
Description
技术领域
本发明涉及电信领域,尤其涉及一种定时器的管理方法。
背景技术
计算机系统常常需要为处理器和外设提供时间标记,或对外部事件进行计数,分为内部定时和外部定时:内部定时是计算机本身运行的时间基准或时序关系,计算机每个操作都是按照严格的时间节拍执行的;外部定时是外部设备实现某种功能时,本身所需要的一种时序关系。对于要求多线索高并发处理能力的实时系统,需要使用到软件定时器(Timer),它利用CPU内部的定时机构(晶振),通过运用软件编程来循环执行一段程序而产生的等待延时。在一些需要大量定时器的系统中,例如通信系统中,需要创建大量的定时器,用来进行定时处理以控制系统中各种事件发生的时间间隔。
例如,电信领域的OCS(Online Charging System,在线计费系统)的业务驱动力主要来自于当前预付费业务实现方式存在的问题以及将来业务发展趋势的影响,目前运营商有准实时计费和在线计费两种方式实现预付费的计费,其方案均不够完善。准实时计费系统实现预付费存在的主要问题表现在对欠费情况的控制上,由于采集时延、系统时延等原因,从用户使用业务到完成计费和信控有较大的时延,使该方式目前实际产生的欠费问题较为严重,也使一些高风险业务(如支付业务等)很难进行大规模的推展;在线计费在解决了时延和欠费风险问题后,引入了实时性要求。事务处理能力由原先的分钟级别到秒级,甚至是毫秒级别提升,对系统资源(CPU和内存)提出了很高的要求。为了更好的支撑在线计费系统,提高系统的响应能力,毫秒级的定时器是必不可少的。
现在使用的定时器多为操作系统和第三方提供的,虽然存在很大的通用性,但是在处理并发性和大并发量的情景时表现不佳。以下简单的概括一下ACE(Adaptive Communication Environment,自适配通信环境)的定时器实现机制方式:ACE的定时器实现有4种,这里不具体介绍实现细节,主要介绍实现数据结构、性能。
具体的4种定时器都是从ACE_Timer_Queue_T继承,每种定时器用不同的数据结构来实现具体Timer(定时器)的算法。
1)ACE_Timer_Heap定时器,根据触发时间建立一个优先级队列(一个最小堆数据结构)来维护所有的定时器,代价就是删除和插入过程的操作复杂度为O(logn),代价比较高。
2)ACE_Timer_List定时器,根据触发时间建立一个有序的双向链表,代价就是插入定时器代价较高。
3)ACE_Timer_Hash定时器,采用开链的Hash方式每一个桶为一个单链表,在检查所有桶超时的时候会遍历链表所有的元素。为了提高效率这里所用的Hash桶应该足够大,而对于定时器一般是频繁的超时响应定时器,已经插入和删除,响应会采用迭代的方式,所以效率并不是那么高效。
4)ACE_Timer_Wheel定时器,采用的一种时间轮的方式,具体实现就好象一个轮子上面有很多插槽,每一个插槽下面包括一个有序双向链表,在Ace中把轮子叫做Wheel,插槽叫做Spoke,每一个定时器被Hash到Spoke中,而Spoke也可以理解为timer的分辨率,而Spoke的计算公式为触发时间>>(分辨率的位数)&(spoke大小-1)。然后在根据触发时间把定时器插入到每一个Spoke的有序双向链表中,与Ace_timer_Hash的实现类似,只是这里用户可以指定Spoke大小。这里的代价就是插入的时候操作复杂度可能最坏为O(n)。
以上定时器的处理方式和性能方面都不适合现有的OCS系统。
发明内容
因此,本发明的目的在于提出一种定时器的管理方法,实现毫秒级的实时定时器。
为实现上述目的,本发明提供一种定时器的管理方法,包括:按照毫秒级划分定时器的时间段,在内存中分别存储与各时间段相关联的互斥锁、标志位和定时器信息;对于每个时间段,所述互斥锁以信号量数值的形式存储,所述标志位以无符号短整型数值的形式存储,所述定时器信息以16个连续的内存块的形式存储,所述16个内存块中的每个都可以用于存储其所属时间段的一个定时器的定时器信息,所述标志位的每个bit位分别依序对应于16个内存块中的一个以标志每个内存块中的定时器信息的使用情况。
其中,所述标志位的bit位为1表示对应内存块位置的定时器信息被占用,所述标志位的bit位为0代表对应内存块位置的定时器信息空闲。
其中,所述内存块使用Hash算法来访问。
其中,所述定时器的管理方法应用于在线计费系统。
综上所述,本发明的定时器的管理方法基于Hash算法和信号量机制实现,实现了毫秒级的实时定时器,可应用于电信、银行等10W级的高并发系统;(1)满足实时交易系统的毫秒级响应机制;(2)具有多线索大吞吐量的承载能力;(3)支持快速查找。
附图说明
下面结合附图,通过对本发明的具体实施方式详细描述,将使本发明的技术方案及其他有益效果显而易见。
附图中,
图1为本发明定时器的管理方法一较佳实施例中属于同一个时间段的定时器信息在内存中的存储结构示意图;
图2为本发明定时器的管理方法一较佳实施例中全部时间段的定时器信息在内存中的存储结构示意图。
具体实施方式
如图1及图2所示,图1为本发明定时器的管理方法一较佳实施例中属于同一个时间段的定时器信息在内存中的存储结构示意图,图2为全部时间段的定时器信息在内存中的存储结构示意图。在此较佳实施例中提出了一种实时性定时器的管理方法,该定时器管理方法是基于Hash算法和信号量机制实现,可以支撑现有的OCS系统的会话机制。
由于OCS系统的实时处理需求要求定时器的精度达到毫秒级别,因此按照毫秒级划分定时器的时间段,超时相同的定时器划入同一时间段。与定时器存储相关的元素有互斥锁、标志位和定时器信息。互斥锁用于保证共享数据操作的完整性,在此较佳实施例中,定时器的互斥锁是利用IPC(Inter-Process Communication,进程间通信)的信号量(Semaphore)机制实现,只需要存储一个信号量的数值即可。标志位用一个无符号短整型数值表示,标志位有两重作用:1、标识对应位置定时器使用与否;2、通过标志位组合的数字以及映射第一个占用位(空闲位),实现快速查找,提高效率;对定时器的操作是通过数字映射实现的,可用来提高查找速度。定时器信息是提供给应用的一个接口,用来保存超时相关的信息,由16个连续的内存块组成(经过理论计算和实际测试来定义的)。
如图1所示,在内存中分别存储与各时间段相关联的互斥锁、标志位和定时器信息;对于每个时间段,所述互斥锁以信号量数值的形式存储,所述标志位以无符号短整型数值的形式存储,所述定时器信息以16个连续的内存块的形式存储,所述16个内存块中的每个都可以用于存储其所属时间段的一个定时器的定时器信息,所述标志位的每个bit位分别依序对应于16个内存块中的一个以标志每个内存块中的定时器信息的使用情况。也就是说,标志位与连续内存块的位置之间相互映射,标志位的16个bit位一一映射于16个连续内存块的位置,并且通过bit位的值来表示该bit位映射的位置的内存块是空闲或者占用的。
参照图1所示的结构,本发明可采用Hash算法来快速存取内存块中的数据,从而提高定时器的处理能力。信号量数值(set)作为Hash算法的键值(key);标志位(flag)标志后面定时器信息(T)的使用情况,用无符号短整型(unsigned short)来表示,其中每个bit位对应后面一个定时器信息,定时器信息作为对应于Hash算法的键值的真值可用来存储与外部应用相关联的信息。
也就是说,由一个信号量数值,一个标志位和16个定时器信息共同组成了最基本的单位以表示同一个时间段的定时器,而用于支撑OCS系统的全部的定时器可以由n(n<10W)个时间段的定时器组成,从而保存系统中所有的定时器信息。如图2所示,其中每行代表一个时间段,表示的时间长度为:毫秒×行数,范围包括1毫秒、2毫秒……n毫秒。通过毫秒级的时间段划分,实现了毫秒级的实时定时器,满足实时交易系统的毫秒级响应机制。
锁冲突会增加CPU负担,降低系统性能,最终会成为定时器的瓶颈。很多现有的定时器都是通过互斥锁保证串行化,这个锁的好坏就成了定时器的关键,也是一个瓶颈。本发明为了减少锁冲突,提高定时器的整体性能,从存储引入了分段锁的概念,实际上是为每一个时间段(毫秒级)的定时器分配一同个锁,其实可以简单理解为多个锁,为系统打开了多条通道,即串行的并行化处理,从而减少了CPU负担,解决多线索系统损耗问题。
解决锁冲突是提高性能的一个方法,减少锁的持有时间也是提高性能的另外一个办法。本发明中通过标志位的占位方式,把原先的对定时器对象的拷贝等等复杂的处理改变成按位与的操作,把锁持有时间由微秒级降低为纳秒级,降低了几个数量级。降低了锁冲突带来的排队和CPU损耗,从而具有多线索大吞吐量的承载能力。
操作复杂度是衡量定时器的重要指标,现有的定时器的复杂度一般为O(n),该发明的定时器的平均复杂度为O(1)。本发明主要基于空间换时间考虑,预先分配足够大连续的内存空间,所有的访问操作都是利用Hash算法通过数组下标来定位,减少了比较和遍历链表的时间。主要的算法包括插入时的空闲位置查找,以及删除时的占用位查找。
为了提高空闲位查找和占用位查找的性能,引入了数值到位置的映射关系。主要是处理通过flag数值定位第一个空闲位和占用位。其中flag为无符号短整型数值,每一个bit位都是一个符号位。例如,可以采用1表示对应位置的内存块被占用,0代表对应位置的内存块空闲,也就是说,标志位的bit位为1表示对应内存块位置的定时器信息被占用,所述标志位的bit位为0代表对应内存块位置的定时器信息空闲。具体的数值映射可以定义为:
unsigned short MASKONE[16]=
{1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768};//占用位
unsigned short MASKZERO[16]=
{0xFFFE,0xFFFD,0xFFFB,0xFFF7,0xFFEF,0xFFDF,0xFFBF,0xFF7F,0xFEFF,0xFDFF,0xFBFF,0xF7FF,0xEFFF,0xDFFF,0xBFFF,0x7FFF};//空闲位
由于标志位(flag)的最大值为65535(2的16次方减1),因此全部枚举需要65535个。每行可以存放的定时器信息个数为16个,一个无符号短整型字符可以表示每行的存储情况。参见附录1,其为本较佳实施例中数值映射的数据结构和实现。该类主要是辅助实现定位首个0(1)位置的。在初始化(init)时,首先分配size个SbitPos结构,并为每个数值设置首个0(1)的位置。当需要根据flag的值,找寻首个1的位置时,只需要调用CNum2PosMap::one(flag)即可;当需要根据flag的值,找寻首个0的位置时,只需要调用CNum2PosMap::zero(flag)即可。通过这个类的数值到位置的映射存储,把原先的二分查找算法所需的8次比较改成现在的数组下标访问,解决插入和删除定时器的性能,大大的提高的查询速率,从而为快速查找定时器信息奠定了基础。
附录1
//0,1存储位置,用来表示一个数值的0(1)的第一个位置(0~15)
typedef struct
{
char one;
char zero;
}SbitPos;
//数值对应的0(1)的首位置映射
class CNum2PosMap
{
public:
CNum2PosMap();
~CNum2PosMap();
public:
static int Init(unsigned short size)
{
int ret=0;
if(NULL==m_pArray)
{
unsigned short i=0;
unsigned short j=0;
unsigned short key=0;
SbitPos*ptr=NULL;
m_array=new SbitPos[size];
for(;i<size;i++)
{
ptr=&m_array[i];
//设置1的位置
key=0x0001;
ptr->one=0xff;
for(j=0;j<hash_list_size;j++)
{
if(i & key)
{
ptr->one=j;
break;
}
else
{
key=key<<1;
}
}
//设置0的位置
key=0x0001;
ptr->zero=0xff;
for(j=0;j<hash_list_size;j++)
{
if((~i)&key)
{
ptr->zero=j;
break;
}
else
{
key=key<<1;
}
}
}
}
else
{
ret=0;
}
return ret;
}
static int one(unsigned short key)
{
int ret=-1;
if(m_array)
{
ret=m_array[key].one;
}
return ret;
}
static int zero(unsigned short key)
{
int ret=-1;
if(m_array)
{
ret=m_array[key].zero;
}
return ret;
}
private:
SbitPos*m_array;
}
在此较佳实施例中,通过采用本发明的定时器管理方法,满足了现有的OCS系统的会话机制对定时器的要求:
1)实时处理能力,精度达到毫秒级别(<10ms);
2)多线索高并发处理能力,支持超过100执行线索的并发处理能力,系统的处理能力不能随线索增加急速下降;
3)快速的删除和插入机制,操作复杂度为O(n),其中n为常数。
综上所述,本发明的定时器的管理方法基于Hash算法和信号量机制实现,实现了毫秒级的实时定时器,可应用于电信、银行等10W级的高并发系统;(1)满足实时交易系统的毫秒级响应机制;(2)具有多线索大吞吐量的承载能力;(3)支持快速查找。
以上所述,对于本领域的普通技术人员来说,可以根据本发明的技术方案和技术构思作出其他各种相应的改变和变形,而所有这些改变和变形都应属于本发明后附的权利要求的保护范围。
Claims (4)
1.一种定时器的管理方法,其特征在于,包括:按照毫秒级划分定时器的时间段,在内存中分别存储与各时间段相关联的互斥锁、标志位和定时器信息;对于每个时间段,所述互斥锁以信号量数值的形式存储,所述标志位以无符号短整型数值的形式存储,所述定时器信息以16个连续的内存块的形式存储,所述16个内存块中的每个都可以用于存储其所属时间段的一个定时器的定时器信息,所述标志位的每个bit位分别依序对应于16个内存块中的一个以标志每个内存块中的定时器信息的使用情况。
2.如权利要求1所述的定时器管理方法,其特征在于,所述标志位的bit位为1表示对应内存块位置的定时器信息被占用,所述标志位的bit位为0代表对应内存块位置的定时器信息空闲。
3.如权利要求1所述的定时器管理方法,其特征在于,所述内存块使用Hash算法来访问。
4.如权利要求1所述的定时器管理方法,其特征在于,所述定时器的管理方法应用于在线计费系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010285242 CN101957779B (zh) | 2010-09-16 | 2010-09-16 | 定时器的管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010285242 CN101957779B (zh) | 2010-09-16 | 2010-09-16 | 定时器的管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101957779A true CN101957779A (zh) | 2011-01-26 |
CN101957779B CN101957779B (zh) | 2013-04-03 |
Family
ID=43485119
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010285242 Active CN101957779B (zh) | 2010-09-16 | 2010-09-16 | 定时器的管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101957779B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102752282A (zh) * | 2012-05-30 | 2012-10-24 | 苏州云初网络技术有限公司 | 一种定时器管理模块 |
CN103106222A (zh) * | 2011-11-15 | 2013-05-15 | 阿里巴巴集团控股有限公司 | 定时器的处理方法及装置 |
CN105653286A (zh) * | 2015-12-31 | 2016-06-08 | 南京理工大学 | Windows平台下毫秒级异步定时器的实现方法 |
CN106528286A (zh) * | 2016-11-22 | 2017-03-22 | 北京智芯微电子科技有限公司 | 一种实现定时器的方法和装置 |
CN109254839A (zh) * | 2018-08-24 | 2019-01-22 | 上海哔哩哔哩科技有限公司 | 确定任务触发时间的方法、构建任务定时器的方法及系统 |
CN109298953A (zh) * | 2018-08-29 | 2019-02-01 | 北京机电工程研究所 | 一种共享内存数据读写的装置和方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1195144A (zh) * | 1997-03-27 | 1998-10-07 | 国际商业机器公司 | 框架环境中工具数据对象的锁定 |
CN1441570A (zh) * | 2002-02-28 | 2003-09-10 | 深圳市中兴通讯股份有限公司上海第二研究所 | 嵌入式实时操作系统中定时器的计时方法 |
CN1581064A (zh) * | 2003-08-13 | 2005-02-16 | 华为技术有限公司 | 一种定时器管理方法 |
-
2010
- 2010-09-16 CN CN 201010285242 patent/CN101957779B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1195144A (zh) * | 1997-03-27 | 1998-10-07 | 国际商业机器公司 | 框架环境中工具数据对象的锁定 |
CN1441570A (zh) * | 2002-02-28 | 2003-09-10 | 深圳市中兴通讯股份有限公司上海第二研究所 | 嵌入式实时操作系统中定时器的计时方法 |
CN1581064A (zh) * | 2003-08-13 | 2005-02-16 | 华为技术有限公司 | 一种定时器管理方法 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103106222A (zh) * | 2011-11-15 | 2013-05-15 | 阿里巴巴集团控股有限公司 | 定时器的处理方法及装置 |
CN102752282A (zh) * | 2012-05-30 | 2012-10-24 | 苏州云初网络技术有限公司 | 一种定时器管理模块 |
CN102752282B (zh) * | 2012-05-30 | 2015-07-01 | 苏州云初网络技术有限公司 | 一种定时器管理模块 |
CN105653286A (zh) * | 2015-12-31 | 2016-06-08 | 南京理工大学 | Windows平台下毫秒级异步定时器的实现方法 |
CN105653286B (zh) * | 2015-12-31 | 2019-01-18 | 南京理工大学 | Windows平台下毫秒级异步定时器的实现方法 |
CN106528286A (zh) * | 2016-11-22 | 2017-03-22 | 北京智芯微电子科技有限公司 | 一种实现定时器的方法和装置 |
CN109254839A (zh) * | 2018-08-24 | 2019-01-22 | 上海哔哩哔哩科技有限公司 | 确定任务触发时间的方法、构建任务定时器的方法及系统 |
CN109254839B (zh) * | 2018-08-24 | 2021-08-06 | 上海哔哩哔哩科技有限公司 | 确定任务触发时间的方法、构建任务定时器的方法及系统 |
CN109298953A (zh) * | 2018-08-29 | 2019-02-01 | 北京机电工程研究所 | 一种共享内存数据读写的装置和方法 |
CN109298953B (zh) * | 2018-08-29 | 2021-12-10 | 北京机电工程研究所 | 一种共享内存数据读写的装置和方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101957779B (zh) | 2013-04-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101957779B (zh) | 定时器的管理方法 | |
US8938603B2 (en) | Cache system optimized for cache miss detection | |
Maier et al. | Concurrent hash tables: Fast and general (?)! | |
CN105960645B (zh) | 安全系统和在安全系统中的方法 | |
CA2706737C (en) | A multi-reader, multi-writer lock-free ring buffer | |
US7949839B2 (en) | Managing memory pages | |
US20150081996A1 (en) | Pauseless garbage collector write barrier | |
Manca et al. | CUDA‐quicksort: an improved GPU‐based implementation of quicksort | |
US20150067293A1 (en) | Non-intrusive storage of garbage collector-specific management data | |
CN103607279A (zh) | 基于多核处理器的密钥保护方法及系统 | |
Cole et al. | Resource oblivious sorting on multicores | |
US7886363B2 (en) | System and method for virtual memory and securing memory in programming languages | |
Denning | The working set model for program behavior | |
US11169804B2 (en) | Method for vectorizing d-heaps using horizontal aggregation SIMD instructions | |
CN102968491A (zh) | 一种数据分配方法和装置 | |
US10073872B2 (en) | Hybrid heap memory management | |
CN109460406A (zh) | 一种数据处理方法及装置 | |
CN109033365A (zh) | 一种数据处理方法及相关设备 | |
Winter et al. | Ouroboros: virtualized queues for dynamic memory management on GPUs | |
CN106201918B (zh) | 一种基于大数据量和大规模缓存快速释放的方法和系统 | |
Gandhi et al. | Mercury: Bringing efficiency to key-value stores | |
CN102209016A (zh) | 一种数据处理方法、装置和数据处理系统 | |
Denning | Working set analytics | |
Peng et al. | FA-Stack: A fast array-based stack with wait-free progress guarantee | |
Quaglia | A low-overhead constant-time lowest-timestamp-first CPU scheduler for high-performance optimistic simulation platforms |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |