具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
实施例1
如图1所示,本发明实施例提供了一种元素出队序列设置方法,包括:
步骤101:根据元素入队时间和优先级,计算该元素的出队优先级;
具体地,根据元素的入队时间,设置该元素的时间戳,根据该元素的时间戳和优先级,计算出该元素的出队优先级。
步骤102:根据元素的出队优先级进行排序,从而得到元素出队序列。
其中,可以根据元素出队序列,从队列中取出元素。
在本发明实施例中,根据元素的入队时间和优先级,设置元素的出队优先级,根据元素的出队优先级进行排序,得到元素出队序列。其中,当元素出队时可以根据元素出队序列进行出队,如此,只需要将所有的元素存放在同一个列表中,且不需要设置单独的进程扫描并增加每个元素的优先级,从而减少占用系统的资源。
实施例2
如图2所示,本发明实施例提供了一种元素出队序列设置方法,包括:
步骤201:当每个元素入队时,根据每个元素入队时间为每个元素设置时间戳;
具体地,当每个元素入队时,获取每个元素的入队时间,根据每个元素的入队时间和标准时间计算出时间差,设置该元素的时间戳为该时间差。
其中,标准时间为事先设置的一个时间点。可以将该标准时间设置为格林威志标准时间。格林威志标准时间为1970年1月1日的00:00:00.00。另外,时间戳的单位为毫秒或秒。
其中,当每个元素入队时,队列从系统函数库中调用用于添加元素的Put函数的同时,发送启动命令。
在本实施例中,当接收到队列发送的启动命令时,开始执行设置每个元素的时间戳的步骤。
其中,在本实施例中,队列为事先初始化的列表。每个元素还具有优先级的属性,用户在创建每个元素时并为每个元素设置优先级,因此,此时每个元素具有优先级和时间戳两个属性。
其中,在队列中,时间戳越大的元素,表示该元素进入队列的时间越晚,在队列中等待的时间越短,反之,时间戳越小的元素,表示该元素进入队列的时间越早,在队列中等待的时间越长。
步骤202:根据每个元素的时间戳和优先级,计算每个元素的出队优先级;
具体地,根据每个元素的时间戳和优先级,按公式(1)计算每个元素的出队优先级;
OutSort=Timestamp-Priority*Weight (1)
其中,OutSort为元素的出队优先级,Timestamp为元素的时间戳,Priority为元素的优先级,Weight为加权值,其值为事先设置的定值。例如,可以将加权值Weight的值设置为500或1000。
其中,可以根据元素的出队优先级中元素入队时间和优先级的权重事先设置加权值的大小。
其中,将元素的优先级和加权值相乘,可以将元素的优先级转换为元素在队列中的生存时间。在本实施例中,利用公式(1)可以用元素的生存时间换取出队优先级的降低,不仅使得入队时间相同的多个元素中优先级越高的元素的出队优先级越小,还使得不同优先级的多个元素可以根据入队时间确定元素出队优先级。
进一步地,对每个元素和每个元素的出队优先级进行封装在一起。
步骤203:根据每个元素的出队优先级进行排序,得到元素出队序列。
具体地,根据每个元素的出队优先级,按从小到大或从大到小的顺序对每个元素进行排序,得到元素出队序列。当从队列中取出元素时,根据元素出队序列取出元素,取出排序最前的元素。
当根据出队优先级从小到大的顺序排序得到元素出队序列时,在从队列中取出元素时将优先取出出队优先级小的元素,可以使得入队时间相同的多个元素中高优先级的元素被优先取出。从而实现高优先级的元素,尽可能被优先取出队列。
其中,每个元素的出队优先级根据每个元素的时间戳和优先级计算获得,因此每个元素的出队优先级都由入队时间及元素优先级共同决定。例如:低优先级的元素在队列中等待的时间越长,即越早进入队列,其时间戳越小,而根据该元素的时间戳和优先级计算获得的出队优先级可能比后加入队列的高优先级元素的出队优先级小;而高优先级的元素在队列中等待的时间越短,即越晚进入队列,其时间戳越大,根据该元素的时间戳和优先级计算获得的出队优先级可能比先加入队列的低优先级元素的出队优先级大。因此,低优先级的元素会随着等待的时间延长,将得到被优先取出的机会。
进一步地,通过设置事先设置加权值的大小,可以决定出队优先级的计算过程中元素时间戳和优先级的权重。例如:加权值分别事先设置为500及1000,公式(1)根据前者计算获得的出队优先级大于后者,即前者的计算过程中元素优先级的权重低于后者。因此,当加权值设置较小时,出队优先级的计算过程中元素时间戳的影响较大;当加权值设置较大时,出队优先级的计算过程中元素优先级的影响较大。
在本发明的本实施例中,只需建立一个队列用于存放进入队列的元素。当每个元素进入队列时,根据其入队时间及元素优先级计算每个元素的出队优先级,再根据每个元素的出队优先级进行排序,从而得到元素出队序列。当从队列中取出元素时,按元素出队序列进行取出元素。由此可知,本发明不仅可以实现高优先级元素的优先取出,还可以避免低优先级元素“饿死”。同时,本发明不需要根据元素优先级设置多个列表或额外的进程周期性地扫描、变更元素优先级,从而减少对系统资源的占用,提升系统效率。
实施例3
本发明实施例提供了一种元素出队序列设置方法。为更好的理解本发明,在本实施例中仅以A、B和C三个元素举例说明其出队优先级的计算过程,并根据其出队优先级按从小到大的顺序进行排序,得到元素出队序列。其中,元素A的优先级为5,元素B的优先级为6,元素C的优先级为9。事先设置标准时间为格林威志时间以及生存时间加权值为500,且时间戳的单位为毫秒。参见图3,该方法包括:
步骤301:在当前时间为1970-1-1的0时10分整时,元素A进入如表1所示的队列,从系统中获取元素A的入队时间为该当前时间;
其中,事先初始化一个队列,该队列可以为一个列表。在本实施例中,在元素A进入表1所示的队列之前,表1所示的队列为空的队列。
表1
步骤302:根据获取的入队时间,设置元素A的时间戳为10000;
具体地,根据入队时间为1970-1-1的0时10分和标准时间,计算出时间差为10000毫秒,设置元素A的时间戳为10000毫秒。
步骤303:根据元素A的时间戳10000毫秒以及元素A的优先级5,计算出元素A的出队优先级为7500;
具体地,将元素A的时间戳Timestamp为10000毫秒和元素A的优先级Priority为5,带入到如下的公式(2)中计算出元素A的出队序列OutSort为7500;
OutSort=Timestamp-500*Priority=10000-500*5=7500……(2)
步骤304:在当前时间为1970-1-1的0时16分整时,元素B进入如表1所示的队列,从系统中获取元素B的入队时间为该当前时间;
其中,元素B进入如表1所示队列后,队列内的元素如表2所示。
表2
步骤305:根据获取的元素B的入队时间,设置元素B的时间戳为16000;
具体地,根据元素B的入队时间为1970-1-1的0时16和标准时间,计算出 时间差为16000毫秒,设置元素B的时间戳为16000毫秒。
步骤306:根据元素B的时间戳16000毫秒以及元素B的优先级6,计算出元素B的出队优先级为13000;
具体地,将元素B的时间戳Timestamp为16000毫秒和元素B的优先级Priority为6,带入到如下的公式(3)中计算出元素B的出队优先级OutSort为13000;
OutSort=Timestamp-500*Priority=16000-500*6=13000……(3)
步骤307:在如表2所示的队列中,按每个元素的出队优先级,对队列中的每个元素进行排序,得到元素出队序列为元素A、B;
具体地,在如表2所示的队列中,根据每个元素的出队优先级,对每个元素进行排序,其中,元素A的出队序列为7500,元素B的出队序列为13000,所以排序后的得到的元素出队序列为A、B。
步骤308:在当前时间为1970-1-1的0时17分整时,元素C进入如表2所示的队列,从系统中获取元素C入队时间为当前时间;
步骤309:根据获取的元素C的入队时间,设置元素C的时间戳为16000;
具体地,根据元素C的入队时间为1970-1-1的0时17分和标准时间,计算出时间差为17000毫秒,设置元素C的时间戳为17000毫秒。
步骤310:根据元素C的时间戳17000毫秒以及元素C的优先级9,获取元素C的出队优先级为12500;
具体地,将元素C的时间戳Timestamp为17000毫秒和元素C的优先级Priority为9,带入到如下的公式(4)中计算出元素C的出队优先级OutSort为12500;
OutSort=Timestamp-500*Priority=17000-500*9=12500……(4)
步骤311:在如表2所示的队列中,按每个元素的出队优先级,对队列中的每个元素进行排序,得到元素出队序列为元素A、C、B,其中,排序后得到的结果如表3所示。
具体地,在如表2所示的队列中,根据每个元素的出队优先级,对每个元素进行排序,其中,元素A的出队序列为7500,元素B的出队序列为13000,元素C的出队序列为12500,所以排序后得到的元素出队序列为A、C、B,如表3所示。
表3
其中,当从如表3所示的队列中取出元素时,根据元素出队序列,优先取出排在最前的元素,即从队列中取出排在最前的元素A;如果还从如表3所示的队列中取出元素,则再根据元素出队序列,从队列中优先取出排在最前的元素C;如果取出元素C后,还需要从如表3所示的队列中取出元素,则再根据元素出队序列,从队列中取出排在最前的元素B。
其中,在本实施例中,只建立一个如表3所示的列表,用于存储不同优先级的元素A、B和C,且不需要设置一个单独的进程去扫描并改变元素A、B和C的优先级,从而减少了对系统的资源的占用。
其中,元素A早于元素B和C进入队列,虽然元素A的优先级低于元素B和C,但元素A在队列中等待的时间长于元素B和C,使得元素A的出队优先级小于元素B和C,在根据出队优先级排序时,A排在元素出队序列的最前端,从而元素A能够先于元素B和C被取出队列;元素B早于元素C进入队列,但元素B和C分别进入队列的时间差较小且元素C的优先级远高于元素B,使得元素C的出队优先级小于元素B,从而可以实现高优先级的元素尽可能优先被取出队列。
在本发明实施例中,分别设置入队的元素A、B和C的时间戳,根据元素A的时间戳和优先级,计算元素A的出队优先级,根据元素B的时间戳和优先级,计算元素B的出队优先级,根据元素C的时间戳和优先级,计算元素C的出队优先级,根据每个元素的出队优先级,对每个元素进行排序,得到元素出队序列,根据元素出队序列取出元素,如此,只需要将所有的元素存放在同一个列表中,且不需要设置单独的进程扫描并增加每个元素的优先级,从而减少占用系统的资源。
实施例4
如图4所示,本发明实施例提供了一种元素出队序列设置装置,包括:
计算模块401,用于根据元素入队时间和优先级,计算元素的出队优先级;
排序模块402,用于根据元素的出队优先级进行排序,从而得到元素出队序 列。
其中,采用时间戳表示元素入队时间,时间戳为元素入队时间与标准时间的时间差。
其中,计算模块401,具体用于按如下的公式计算出元素的出队优先级;
OutSort=Timestamp-Priority*Weight;
其中,OutSort为出队优先级,Timestamp为时间戳,Priority为元素的优先级,Weight为加权值。
计算模块401还包括,
设置单元,用于根据元素的出队优先级中元素入队时间和优先级的权重设置所述加权值。
进一步地,该元素出队序列设置装置还包括:
封装模块,用于对元素和元素的出队优先级进行封装。
其中,获取模块401具体包括:
获取单元,用于获取该新元素插入到优先级队列的当前时间;
计算单元,用于计算当前时间与标准时间的时间差;
设置单元,用于设置该新元素入队的时间戳为计算的时间差。
其中,计算模块402,具体用于根据设置的时间戳和该新元素的优先级,按如下的公式计算出所述新元素的出队序列;
OutSort=Timestamp-Priority*Weight;
其中,OutSort为出队序列,Timestamp为时间戳,Priority为优先级,Weight为生存时间加权值,生存时间加权值Weight为事先设置的定值。
进一步地,该元素出队序列设置装置还包括:
接收模块,用于当元素加入队列时,接收队列发送的启动命令;
相应地,获取模块401,具体用于根据接收的启动命令,获取元素加入队列的时间戳。
进一步地,该元素出队序列设置装置还包括:
封装模块,用于对该新元素和该新元素的出队序列进行封装。
由此可知,本发明不仅可以实现高优先级元素的优先取出,还可以避免低优先级元素“饿死”。同时,本发明仅需建立一个队列,不需要根据元素优先级设置多个列表或额外的进程周期性地扫描、变更元素优先级,从而减少对系统 资源的占用,提升系统效率。
以上实施例提供的技术方案中的全部或部分内容可以通过软件编程实现,其软件程序存储在可读取的存储介质中,存储介质例如:计算机中的硬盘、光盘或软盘。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。