一种任务轮询方法、任务排布方法和相关装置与流程

文档序号:14394498阅读:357来源:国知局

本发明涉及数据处理领域,特别是涉及一种任务轮询方法、任务排布方法和相关装置。



背景技术:

计算机系统中,一些业务需要在未来的某个预定时间实现,例如在每天固定时段推送信息、特定时间点或日期上线某些活动内容等。如果单纯依靠人工方式,等待预定时间到达时通过计算机系统实施这类业务,会带来很高的成本和不确定性。

传统的做法是利用预先创建的具有时延特性的任务,这类任务可以设置时延时间,例如10秒、10分钟、10天等。时延时间可以以倒计时的方式,随着时间流逝而缩短,例如0时刻时创建一个任务的时延时间为10秒,则0时刻的8秒钟后,这个任务的时延时间将变为10-8=2秒。由于具有时延时间,故这类任务在创建时并不会马上被计算机系统所执行,而是在等待时延时间归零时被执行。具体的,计算机系统通过监控这类任务的时延时间,在一个任务的时延时间归零时自动调取并执行这个任务,从而通过执行这个任务实现其对应的业务。

计算机系统一般将这类具有时延特性的任务统一保存在一个存储区域中,并以周期性的轮询该存储区域中的任务,轮询的过程中计算轮询到的任务的时延时间是否已经归零,并执行时延时间归零的任务。

然而这种任务轮询方式的问题在于,为了尽量保证所有具有时延特性的任务在时延时间归零时能够被监控到,需要计算机系统在每个轮询周期内将保存在该存储区域中的所有任务全部轮询一遍,而且鉴于有些任务的时延时间较短,使得计算机系统的轮询周期需要相应设置的更短,从而导致计算机系统需要在短时间间隔下重复的轮询大量的任务,使得轮询任务消耗了大量的系统资源,影响了计算机系统性能。



技术实现要素:

为了解决上述技术问题,本发明提供了一种任务轮询方法、任务排布方法和相关装置,减少了一次轮询任务的数量,避免了频繁轮询时延时间较长的任务,提高了系统资源利用率。

本发明实施例公开了如下技术方案:

第一方面,本发明提供了一种任务轮询方法,应用于计算机系统,所述计算机系统中设置了具有对应时间区间的多个队列,所述多个队列中的每个队列用于排布时延时间符合所对应时间区间的任务,所述多个队列至少包括第一队列和第二队列,所述第一队列的轮询周期大于所述第二队列的轮询周期,所述方法包括:

根据所述第一队列的轮询周期轮询所述第一队列中排布的任务;

计算被轮询到任务的时延时间;

判断被轮询到的任务的时延时间所处的时间区间;其中,在判断第一任务的时延时间所处的时间区间时,所述第一任务为所述第一队列所排布任务中的一个任务;

若所述第一任务的时延时间处于所述第二队列所对应的时间区间中,将所述第一任务从所述第一队列中取出,并排布到所述第二队列中。

可选的,所述判断第一任务的时延时间所处的时间区间,还包括:

若所述第一任务的时延时间小于等于0,将所述第一任务从所述第一队列中取出,并执行所述第一任务。

可选的,所述第一队列对应的时间区间与所述第二队列对应的时间区间不重叠。

可选的,所述根据所述第一队列的轮询周期轮询所述第一队列中排布的任务,包括:

为第二任务设置标记,所述第二任务为在所述第一队列的轮询周期中轮询到的第一个任务;

轮询完所述第二任务后,将所述第二任务排布到所述第一队列的队尾;

依据队列排布顺序依次轮询所述第一队列中的任务,并在轮询完一个任务后将这个任务排布到所述第一队列的队尾;

当轮询到具有所述标记的所述第二任务时,取消所述第二任务的标记并结束轮询。

可选的,所述为第二任务设置标记,还包括:

将第二时刻保存到所述第二任务中,所述第二时刻为通过第一时刻和所述第一队列的轮询周期确定,所述第一时刻为标记所述第二任务的时刻;

所述当轮询到具有所述标记的所述第二任务时,还包括:

从所述第二任务中获取所述第二时刻;

根据第三时刻和所述第二时刻确定出下一次对所述第一队列进行轮询的时刻,所述第三时刻为轮询到具有所述标记的所述第二任务的时刻。

可选的,在所述根据所述第一队列的轮询周期轮询所述第一队列中排布的任务之前,还包括:

判断所述第一队列中是否排布有任务;

若没有排布任务,则等待一个所述第一队列的轮询周期后再次执行所述判断所述第一队列中是否排布有任务。

可选的,所述多个队列的队列类型包括设置在内存中的内存队列、设置在磁盘中的文件队列、设置在数据库中的表结构形式的队列中任意一个或多个的组合。

可选的,所述多个队列中轮询周期最短的队列为设置在内存中的内存队列。

可选的,所述方法还包括:

获取第三任务,所述第三任务为具有时延时间的任务;

将所述第三任务排布到所述多个队列中的第三队列中,所述第三任务的时延时间处于所述第三队列对应的时间区间中。

第二方面,本发明提供了一种任务轮询装置,应用于计算机系统,所述计算机系统中设置了具有对应时间区间的多个队列,所述多个队列中的每个队列用于排布时延时间符合所对应时间区间的任务,所述多个队列至少包括第一队列和第二队列,所述第一队列的轮询周期大于所述第二队列的轮询周期,所述装置包括轮询单元、计算单元、判断单元和排布单元:

所述轮询单元,用于根据所述第一队列的轮询周期轮询所述第一队列中排布的任务;

所述计算单元,用于计算被轮询到任务的时延时间;

所述判断单元,用于判断被轮询到的任务的时延时间所处的时间区间;其中,在判断第一任务的时延时间所处的时间区间时,所述第一任务为所述第一队列所排布任务中的一个任务;若所述第一任务的时延时间处于所述第二队列所对应的时间区间中,触发所述排布单元;

所述排布单元,用于将所述第一任务从所述第一队列中取出,并排布到所述第二队列中。

可选的,所述轮询单元还用于为第二任务设置标记,所述第二任务为在所述第一队列的轮询周期中轮询到的第一个任务;轮询完所述第二任务后,将所述第二任务排布到所述第一队列的队尾;依据队列排布顺序依次轮询所述第一队列中的任务,并在轮询完一个任务后将这个任务排布到所述第一队列的队尾;当轮询到具有所述标记的所述第二任务时,取消所述第二任务的标记并结束轮询。

可选的,所述轮询单元还用于将第二时刻保存到所述第二任务中,所述第二时刻为通过第一时刻和所述第一队列的轮询周期确定,所述第一时刻为标记所述第二任务的时刻;从所述第二任务中获取所述第二时刻;根据第三时刻和所述第二时刻确定出下一次对所述第一队列进行轮询的时刻,所述第三时刻为轮询到具有所述标记的所述第二任务的时刻。

第三方面,本发明提供了一种任务排布方法,应用于计算机系统,所述计算机系统中设置了具有对应时间区间的多个队列,在所述多个队列中的每个队列用于排布时延时间符合这个队列所对应时间区间的任务,所述方法包括:

获取任务,所述任务为具有时延时间的任务;

若所述任务的时延时间处于目标队列对应的时间区间中,将所述任务排布到所述目标队列中,所述目标队列为所述多个队列中的一个队列。

可选的,所述多个队列至少包括第一队列和第二队列,所述第一队列的轮询周期大于所述第二队列的轮询周期,所述方法包括:

根据所述第一队列的轮询周期轮询所述第一队列中排布的任务;

计算被轮询到任务的时延时间;

判断被轮询到的任务的时延时间所处的时间区间;其中,在判断第一任务的时延时间所处的时间区间时,所述第一任务为所述第一队列所排布任务中的一个任务;

若所述第一任务的时延时间处于所述第二队列所对应的时间区间中,将所述第一任务从所述第一队列中取出,并排布到所述第二队列中。

可选的,所述多个队列的队列类型包括设置在内存中的内存队列、设置在磁盘中的文件队列、设置在数据库中的表结构形式的队列中任意一个或多个的组合。

可选的,所述多个队列中轮询周期最短的队列为设置在内存中的内存队列。

第四方面,本发明提供了一种任务排布装置,应用于计算机系统,所述计算机系统中设置了具有对应时间区间的多个队列,在所述多个队列中的每个队列用于排布时延时间符合这个队列所对应时间区间的任务,所述装置包括获取单元和排布单元:

所述获取单元,用于获取任务,所述任务为具有时延时间的任务;

所述排布单元,用于若所述任务的时延时间处于目标队列对应的时间区间中,将所述任务排布到所述目标队列中,所述目标队列为所述多个队列中的一个队列。

由上述技术方案可以看出,在计算机系统中设置多个用于排布任务的队列,队列中所排布任务的时延时间符合该队列所对应的时间区间,由于时延时间处于不同时间区间的任务被分散的排布在不同队列中,故对于一个队列所轮询的仅是这个队列中的任务,所以一次需要轮询任务的数量显然比传统方式中一次需要轮询计算机系统中全部任务的数量要少。对于该多个队列中的第一队列,根据第一队列的轮询周期轮询第一队列中的任务,并计算轮询到任务的时延时间,若轮询到第一任务的时延时间处于该多个队列中第二队列对应的时间区间内,则将第一任务从第一队列中取出并排布到轮询周期较小的第二队列中,可见,第一任务的时延时间较长时可以放在轮询周期较长的第一队列中,避免了频繁轮询第一任务,节约了系统资源。当第一任务的时延时间较短时可以排布到轮询周期较短的第二队列,通过较为频繁的轮询以提高第一任务的时延时间归零时可以被及时执行的可能性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种计算机系统内设置的多个队列的示意图;

图2为本发明实施例提供的一种轮询方法的流程图;

图3为本发明实施例提供的一种轮询队列中任务的方法流程图;

图4为本发明实施例提供的一种确定下一次轮询时刻的方法的流程图;

图5为本发明实施例提供的一种将任务排布到队列中的方法的流程图;

图6为本发明实施例提供的一种任务轮询装置的装置结构图;

图7为本发明实施例提供的一种任务排布方法的方法流程图;

图8为本发明实施例提供的一种任务排布装置的装置结构图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在计算机系统中,针对一些需要在未来某个预定时间实现的业务,一般的解决方案是预先创建具有时延时间的任务,当一个任务的时延时间通过倒计时的方式归零时,这个任务将被执行,通过执行这个任务可以实现对应的业务。

为了保证这类任务在时延时间归零时可以被及时执行,需要通过轮询的方式监控这类任务的时延时间。然而,传统方式中一般对这类任务采取统一保存、统一轮询。而且,由于有些任务的时延时间可能比较短,统一轮询的周期也必须设置的很短,当统一存储的任务数量较多时,会导致计算机系统需要在短时间间隔下重复的轮询大量的任务,使得轮询任务消耗了大量的系统资源,影响了计算机系统性能。而且由于任务数量较多,还有可能导致在一个轮询周期中无法全部轮询完一遍,例如数据库里统一存储的任务有1000万个,设置的轮询周期为10秒,即需要每10秒轮询一次存储的全部任务,由于处理器的处理速度的性能瓶颈,假设1秒可以查询最多50万条数据,10秒的时间只能最多轮询500万个任务,就必须开始新一轮的轮询,这样会导致一部分任务可能长时间内都无法轮询到,使得一些时延时间已经归零、本该执行的任务被拖延,造成任务的堆积,业务推出时间延误。

为此,本发明实施例提供了一种任务轮询方法、任务排布方法和相关装置,在计算机系统中设置多个用于排布任务的队列,这多个队列都具有对应的时间区间,其中每个队列中所排布任务的时延时间符合该队列所对应的时间区间,例如这个多个队列包括队列a、队列b等,队列a对应的时间区间为10到20秒,队列b对应的时间区间为30到40秒,那么队列a中可以排布时延时间在10到20秒之间的任务,队列b中可以排布时延时间在30到40秒之间的任务。需要注意的是,该计算机系统中除了可以设置上述具有对应时间区间的队列,也可以设置其他传统方式中的队列。

由于时延时间处于不同时间区间的任务被分散的排布在不同队列中,故对于一个队列所轮询的仅是这个队列中的任务,所以一次需要轮询任务的数量显然比传统方式中一次需要轮询计算机系统中全部任务的数量要少。例如针对上述1000万个任务的场景,在设置了多个队列的情况下,这1000万个任务会按照规则分别排布在这各个队列中,其中一个队列中任务数量一般小于1000万个,那么在针对这个队列进行任务轮询时,所需轮询的任务会小于传统方式中需要轮询的任务,可以有效减少甚至杜绝由于没有及时轮询到导致一些时延时间已经归零、本该执行的任务被拖延的问题。

对于该多个队列中的第一队列,根据第一队列的轮询周期轮询第一队列中的任务,并计算轮询到任务的时延时间,若轮询到第一任务的时延时间处于该多个队列中第二队列对应的时间区间内,则将第一任务从第一队列中取出并排布到轮询周期较小的第二队列中,可见,第一任务的时延时间较长时可以放在轮询周期较长的第一队列中,避免了频繁轮询第一任务,节约了系统资源。当第一任务的时延时间较短时可以排布到轮询周期较短的第二队列,通过较为频繁的轮询以提高第一任务的时延时间归零时可以被及时执行的可能性。

在具体介绍本发明的技术方案之前,先介绍本发明在计算机系统所设置的多个队列。设置了多个队列的计算机系统可以是本地计算机,也可以是网络侧的服务器。根据不同的场景需求,可以将这这些队列设置在计算机系统的数据库、磁盘和内存任意一个或多个的组合中。设置在数据库中的队列可以为表结构形式的队列,设置在磁盘中的队列可以为文件队列,设置在内存中的队列可以是内存队列。该多个队列并不限定必须要设置在同一个存储空间中,可以一部分队列设置在内存中,一部分队列设置在磁盘中等可能的组合形式。例如:当计算机系统中包括队列1、队列2和队列3这三个队列时,可以将队列1设置在内存中,将队列2设置在磁盘中,将队列3设置在数据库中。除了上述较为常用的存储介质:内存、磁盘和数据库以外,还可以将队列设置在其他存储介质中。

对所设置的多个队列中任务进行轮询的执行主体可以是计算机系统的处理模块,由该处理模块根据各个队列的轮询周期,负责对各个队列中任务的轮询。也可以为每个队列分别分配对应的处理模块来负责队列中任务的轮询,也可以几个队列由同一个处理模块来完成任务的轮询。

将时延时间较短的任务放入第二队列中后,由于第一队列的轮询周期大于第二队列的轮询周期,所以对该第二队列中的任务的轮询相对比较频繁,由于内存的读写效率要高于磁盘、数据库等存储介质,故可以将轮询周期较短的队列例如第二队列设置在内存中,以便于提高对这些队列中任务的读写效率。

所设置的多个队列可以如图1所示,通过设置的n个队列,可以将具有时延时间的任务分别排布在这n个队列中,对于一个队列,所需轮询的任务会小于传统方式中需要轮询的任务,可以有效减少甚至杜绝由于没有及时轮询到导致一些时延时间已经归零、本该执行的任务被拖延的问题。

上文中已经明确了具有时延时间的任务的作用,可以通过创建这类任务来实现一些需要在固定时间提供的业务。如20号的15点、18点、23点均需要上线新业务,分别为业务a、业务b和业务c,工作人员可以在20号12点时创建时延时间为3小时的任务a、6小时的任务b和11小时的任务c,分别对应上述三个上线业务。任务的时延时间会随着时间推移而减少,例如任务a在创建时(时刻为0秒时)的时延时间为180分钟,创建后的一个小时后,即时刻为60分钟时,任务a的时延时间将变为180-60=120分钟。创建后的三个小时后,即时刻为180分钟时,任务a的时延时间将归零,达到被执行的条件。

设置的多个队列分别具有对应的时间区间,针对这多个队列中的一个队列,这个队列可以用于排布时延时间符合这个队列所对应时间区间的任务。在一个队列中排布任务的方式可以有多种,例如可以将任务排布成一个队列的形式,后入队的任务排在队尾;也可以将任务排布成一个首尾相接的环形队列。需要注意的是,当一个队列中没有任务时,这个队列并不会由此不存在,这个队列可以为一个空队列。

可以理解的是,各个队列对应的时间区间可以是部分重叠的,也可以是不重叠的。若两个队列各自对于的时间区间之间具有重叠部分,那么当轮询到一个任务的时延时间处于这个重叠部分时,还需要进一步判断将这个任务排布在这两个队列中哪一个队列中,为了简化流程,提高效率,在本发明的技术方案中,可选的,所述第一队列对应的时间区间与所述第二队列对应的时间区间不重叠。例如,当计算机系统中包括6个队列时,6个队列分别对应的时间区间不重叠。其中,队列1的时间区间是大于3200秒,队列2的时间区间大于等于800且小于3200秒,即不包括3200秒的时间节点;队列3的时间区间大于等于200秒且小于800秒,即不包括800秒的时间节点;队列4的时间区间大于等于40秒且小于200秒,即不包括200秒的时间节点;队列5的时间区间大于等于10秒且小于40秒,即不包括40秒的时间节点。若对队列1进行任务轮询的过程中,轮询到的一个任务的时延时间为200秒,处于队列3所对应的时间区间,可以将这个任务从队列1取出,排布到队列3中。

可见,通过为不同的队列设定不重叠的时间区间,保证了当用户提交一个任务后,能够根据该任务的时延时间确定一个对应的队列,不必再经过判断或者其他机制来确定该任务所对应的队列,简化了任务排布的过程,缩短了处理时间。

一个队列所对应的时间区间可以作为判断这个队列可排布任务的依据。为了尽量避免在队列的一个轮询周期中轮询到任务时,该任务的时延时间已经归零很久了的情况发生,该队列所对应的时间区间可以根据该队列的轮询周期来设置。例如一个队列所对应的轮询周期为40秒,若将一个时延时间为30秒的任务排布在这个队列中,很可能在轮询到这个任务时,这个任务的时延时间已经早在10秒前就归零了,从而造成了任务的延误。故这个轮询周期为40秒的队列所对应的时间区间可以设置为大于40秒,例如40秒至100秒,这样排布到这个队列中的任务的时延时间一般都大于这个队列的轮询周期。

其中,一个队列的轮询周期是指相邻两次轮询之间所间隔的周期,在一个轮询周期中,希望可以对队列中所有的任务均轮询一次。例如一个队列所对应的轮询周期为40秒,则将每隔40秒针对这个队列执行一次对这个队列中任务的轮询,例如时刻为0秒时,开始对这个队列中任务进行第一次轮询,待时刻为40秒时,开始对这个队列中任务进行第二次轮询,以此类推。

所设置的多个队列中可以至少包括第一队列和第二队列,第一队列的轮询周期可以大于第二队列的轮询周期。

所设置的多个队列中的各个队列的轮询周期可以互不相同,可以根据具体情况具体设定各个队列的轮询周期。例如:当计算机系统中设置了5个队列时,5个队列的轮询周期可以分别设定为3200秒,800秒,200秒,40秒和10秒。其中,第一队列可以是除了轮询周期为10秒的队列以外的其他四个队列之一,第二队列的可以是比第一队列的轮询周期要小的一个队列。

接下来结合附图2,详细描述本发明实施例提供的一种任务轮询方法。

s101:根据所述第一队列的轮询周期轮询所述第一队列中排布的任务。

举例说明,本发明并不限定对第一队列中任务的轮询方式,只要可以达到在轮询周期内将第一队列中各个任务轮询一次的效果即可。轮询方式例如可以是以从队列中依次抽取任务的方式实现轮询,也可以是随机抽取任务的方式轮询。

在轮询之前判断队列中是否有排布任务,如果没有,则等待一个轮询周期的时间。而在该轮询周期的时间内,由于不需要进行轮询操作,降低了计算机系统的资源消耗。即可选的,可以在对第一队列中的任务进行轮询之前,判断第一队列中是否有排布的任务,若有任务,可以执行步骤s101,开始任务轮询。若第一队列中没有排布任务,则可以等待一个所述第一队列的轮询周期,再次执行s101。

s102:计算被轮询到任务的时延时间。

时延时间是指每个队列中的任务距离被执行时的剩余时间,随着时间的推移不断减小,本步骤所计算到的时延时间是指在轮询到一个任务的时刻,这个任务在这个时刻时的轮询时间。例如,当队列a对应的轮询周期是20秒时,若对队列a实施第一次任务轮询时,轮询到任务t,任务t的时延时间是38秒,可以继续排布在队列a中。当根据队列a的轮询周期,实施第二次任务轮询时再轮询到任务t时,由于队列a对应的轮询周期是20秒,因此,此时轮询到任务t时已经过去了队列a对应的轮询周期的时间,也就是20秒,则此时任务t对应的时延时间是38秒-20秒=18秒。可以看出,任务t的时延时间是随着时间的推移而不断减小的,而非一个不变的数值。

s103:判断被轮询到的任务的时延时间所处的时间区间,其中,在判断第一任务的时延时间所处的时间区间时,所述第一任务为所述第一队列所排布任务中的一个任务。

举例说明,第一任务是第一队列中所排布任务中的任意一个任务,本发明并不限定第一任务在第一队列中的具体排布位置,可以是第一队列中处于队列头的任务,也可以是第一队列中处于队列尾的任务,也可以是第一队列中其他位置排布的任务。

需要注意的是,依次轮询第一队列中的任务过程中,当轮询到第一任务时,有可能第一任务的时延时间已经归零,甚至小于0,这个情况下,可以将所述第一任务从所述第一队列中取出,并执行所述第一任务。

容易理解的是,在轮询任务过程中,可能会出现轮询到任务时,刚好到了该任务被执行的时间,此时,该任务的时延时间等于0,则将该任务从队列中取出,并执行该任务;也可能会出现当轮询到任务时,已经过了该任务被执行的时间,此时,该任务的时延时间小于0(也属于已经归零的一个情况),则将该任务从队列中取出,并执行该任务。

下面通过举例对该部分内容做进一步说明。

首先选,针对任务的时延时间等于0被执行的情况进行举例说明。例如,某队列m的时间区间是800秒~3200秒,该队列m的轮询周期是800秒,,某任务n的时延时间是1600秒,且排列在该队列的最前面队首,当第一次轮询到该任务n时,该任务n的时延时间是1600秒,处于该队列m的时间区间内,则仍然将该任务n仍然排布在该队列m中,当经过一个队列m的轮询周期800秒的时间后,在队列m中再一次轮询到了该任务n,此时该任务n的时延时间是1600秒-800秒=800秒,仍然处于该队列m的时间区间内,当下一次轮询到该任务n时,时间已经过去了一个队列m的轮询周期的的时间,即800秒的时间,则此时轮询到该任务n时,该任务n的时延时间为800秒-800秒=0秒,则从该队列m中取出该任务n,并执行任务n。

其次,针对任务的时延时间小于0被执行的情况进行举例说明。例如,某队列p的时间区间是小于10秒,该队列p的轮询周期是1秒,某任务q的时延时间是0.4秒,且该任务q排列在该队列p的中间位置或者队尾或者最后的位置,在一次轮询过程中,从队列p的最前面队首的任务轮询到将任务q的时间是0.5秒,当轮询到该任务q时,该任务q的时延时间是0.4-0.5=-0.1秒,即该任务q已经过时,则此时,取出任务q,并执行该任务q。

s104:若所述第一任务的时延时间处于所述第二队列所对应的时间区间中,将所述第一任务从所述第一队列中取出,并排布到所述第二队列中。

由于随着时间的推移,第一任务的时延时间是逐渐减小的,在轮询过程中,当判断出第一任务的时延时间所对应的时间区间是第二队列时,则将第一任务排布到第二队列中。

举例说明,队列b的时间区间是200秒~400秒,轮询周期是200秒,队列c的时间区间是100秒到~199秒,轮询周期是100秒,任务m的时延时间是350秒,排布在队列b中。首次轮询到任务m时,由于任务m的时延时间是350秒,判断任务m的时延时间处于队列b的时间区间内,则仍然将任务m排布在队列b中,当经过一个队列b的轮询周期后,任务m的时延时间是350秒-200秒=150秒,此时,判定任务m的时延时间所处的时间区间是队列c对应的时间区间,因此,将任务m从队列b中取出,并排布到第二队列中。

还需要说明的是,将第一任务从第一队列中取出后,排布到第二队列中,并不限定第一任务在第二队列中具体排布位置,可以是将第一任务排布到第二队列队首的位置,也可以将第一任务排布到第二队列队尾的位置,也可以将第一任务排布到第二队列的其他任意一个位置。

本发明不限定第一队列和第二队列在所设置的多个队列中的关系。第二队列和第一队列可以是时间区间相邻的两个队列,也可能是时间区间不相邻的两个队列,这需要根据任务的时延时间确定对应的队列,从而将任务取出,并排布到相应的队列中。下面结合具体举例进一步说明这一点。

当计算机系统中设置了6个队列时,6个队列分别对应有各自的时间区间:队列d的时间区间是大于3200秒,队列e的时间区间是800秒~3200秒,队列f的时间区间是200秒~800秒,队列g的时间区间是40秒~200秒,队列h的时间区间是10秒~40秒,队列i的区间是小于10秒。假设当队列d中依次存放有3205秒、3230秒、3250秒、3430秒和4030秒的任务时,在第一次轮询时,首先轮询到的是3205秒的任务,由于3205秒大于队列d的时间区间3200秒,则该任务还是排布在队列d中,相应的,3230秒、3250秒、3430秒和4030秒的任务由于时延时间都大于3200秒,所以仍排布在队列d中。当在队列d中第二次轮询到3205秒的任务时,已经过去了一个队列d的轮询周期的时间,此时,3205秒的任务的时延时间是3205秒-3200秒=5秒,因此,此时该任务对应的时间区间是队列i的时延时间,所以将该任务放入队列i中等待执行,相应的,此时,3230秒、3250秒、3430秒和4030秒的任务的时延时间为30秒、50秒、230秒和830秒(由于队列中任务较少,忽略轮询一遍队列中所有任务的轮询时间),根据各个队列对应的时延时间,3230秒的任务由于距离被执行还剩30秒的,因此,排布到队列h中,相应的将3250秒的任务排布到队列g,将3430秒的任务排布到队列f中,将4030秒的任务排布到队列e中。

由上述实施例可见,在计算机系统中设置多个用于排布任务的队列,队列中所排布任务的时延时间符合该队列所对应的时间区间,由于时延时间处于不同时间区间的任务被分散的排布在不同队列中,故对于一个队列所轮询的仅是这个队列中的任务,所以一次需要轮询任务的数量显然比传统方式中一次需要轮询计算机系统中全部任务的数量要少。对于该多个队列中的第一队列,根据第一队列的轮询周期轮询第一队列中的任务,并计算轮询到任务的时延时间,若轮询到第一任务的时延时间处于该多个队列中第二队列对应的时间区间内,则将第一任务从第一队列中取出并排布到轮询周期较小的第二队列中,可见,第一任务的时延时间较长时可以放在轮询周期较长的第一队列中,避免了频繁轮询第一任务,节约了系统资源。当第一任务的时延时间较短时可以排布到轮询周期较短的第二队列,通过较为频繁的轮询以提高第一任务的时延时间归零时可以被及时执行的可能性。

为了能够准确有效的轮询队列中的任务,本发明实施例还提供了一种轮询队列中任务的具体方式,通过队列中任务的排布顺序依次轮询队列中的任务,并可以尽量确保不会出现一个任务被轮询多次的情况发生。

可选的,在图2所对应实施例的基础上,图3为本发明实施例提供的一种轮询队列中任务的方法流程图,所述方法包括:

s201:为第二任务设置标记,所述第二任务为在所述第一队列的轮询周期中轮询到的第一个任务。

举例说明,第二任务可以是第一队列中的任意一个任务,例如第二任务可以是第一任务。不过由于第二任务是一个轮询周期中所轮询到的第一个任务,故一般情况下第二任务是第一队列中处于队列头的任务。

为第二任务设置标记的作用主要是为了确定什么时候完成任务轮询,具体内容在s204中进行说明。

s202:轮询完所述第二任务后,将所述第二任务排布到所述第一队列的队尾。

s203:依据队列排布顺序依次轮询所述第一队列中的任务,并在轮询完一个任务后将这个任务排布到所述第一队列的队尾。

举例说明,在一个轮询周期中,由于轮询完第一队列中的一个任务,会将这个任务排布到第一队列的队尾。这样在第二任务之后轮询到的其他任务在轮询后,在队列的排布顺序上,依然排布在第二任务之后。不过需要注意的是,在任务轮询过程中,一些情况下并不是第一队列中每一个任务都按照s203所限定的方式实施,如果轮询到的一个任务(包括第二任务)的时延时间处于其他队列所对应的时间区间中,这个任务将会从第一队列中取出并排布到其他队列中,而不会再排布在第一队列的队尾位置。

s204:当轮询到具有所述标记的所述第二任务时,取消所述第二任务的标记并结束轮询。

由于在步骤s201中已经为第二任务设置了标记,且轮询完的任务中,时延时间仍处于第一队列的时间区间中的任务均按照s202和s203的方式重新排布在第一队列中的队尾。那么在这个轮询周期中,若轮询到具有该标记的第二任务时,说明已经将这个轮询周期中开始轮询任务时第一队列中的全部任务都轮询了一遍,可以认为这个轮询周期中的任务轮询已经完成。因此,可以取消第二任务的标记并结束本次轮询。

通过设置在第二任务上的标记,以尽量确保在一个轮询周期中不会出现一个任务被轮询多次的情况发生,提高了轮询效率。

一般情况下,在轮询过程中,完成对一个队列中任务的轮询所消耗的时间会小于这个队列的轮询周期。,即当轮询一遍队列中的任务后,而下一个轮询周期还未开始,因此,需要确定出下一次轮询的时间。传统的实现方式是可以通过对一个队列设置相应的计时器,例如可以在开始一次任务轮询时开始计时,通过计时器的数值来判断是否开始下一次任务轮询。然而这种方式需要对各个队列均设置相应的计时器,造成系统资源的浪费。故本发明实施例还提供了一种确定开始任务轮询时刻的方法,在图3所对应的实施例的基础上,参见附图4,所述方法包括:

s301:为第二任务设置标记,所述第二任务为在所述第一队列的轮询周期中轮询到的第一个任务。

s302:将第二时刻保存到所述第二任务中,所述第二时刻为通过第一时刻和所述第一队列的轮询周期确定,所述第一时刻为标记所述第二任务的时刻。

举例说明,本发明并不限定执行s301和s302的先后顺序,s302可以先于s301执行,这两个步骤也可以同时执行。

第一时刻可以是在一个轮询周期中第一次轮询到第二任务的时刻,例如:一个轮询周期中第一次轮询到第二任务时的具体时间为12点,则第一时刻可以为12点。第二时刻由第一时刻和第一队列的轮询周期共同确定,例如第一队列的轮询周期为10秒,第一时刻为12点时,第二时刻可以为12点10秒。

通过在第二任务中保存第二时刻,可以在同一个轮询周期中再一次轮询到第二任务时,通过第二时刻确定出下一次进行任务轮询的时间。

s303:轮询完所述第二任务后,将所述第二任务排布到所述第一队列的队尾。

s304:依据队列排布顺序依次轮询所述第一队列中的任务,并在轮询完一个任务后将这个任务排布到所述第一队列的队尾。

s305:当轮询到具有所述标记的所述第二任务时,并从所述第二任务中获取所述第二时刻。

s306:根据第三时刻和所述第二时刻确定出下一次对所述第一队列进行轮询的时刻,所述第三时刻为轮询到具有所述标记的所述第二任务的时刻。

s307:取消所述第二任务的标记并结束轮询。

本实施例中并不限定s306和s307之间的执行顺序,s307可以先于s306之前被执行,s306也可以先于s307之前被执行,s306和s307也可以同时被执行。

举例说明,将第二时刻保存到设置了标记的第二任务后,当在同一个轮询周期内轮询到设置有标记的第二任务时,可以从第二任务中获取到在s302所保存的第二时刻,例如上述的第二时刻为12点10秒。第三时刻为轮询到具有标识的第二任务的时刻,例如:第三时刻可以是轮询到具有标识的第二任务的时刻是12点8秒。由于第一时刻和第三时刻是在一个轮询周期中,先后两次轮询到第二任务的时刻,从第一时刻到第三时刻也就是轮询完一遍第一队列中任务所消耗的时间。故通过由第二时刻和第三时刻可以确定出这个轮询周期还剩余的时间。

例如,根据第三时刻12点8秒和第二时刻12点10秒,确定出下一次对该队列进行轮询的时刻:12点10秒-12点8秒=2秒,也就是这个轮询周期还剩下2秒钟结束,2秒后可以对第一队列进行下一次任务轮询。

由此可见,不需要额外设置计时器,通过在第一队列的第二任务中保存的第二时刻,可以在同一个轮询周期中第二次轮询到第二任务时,根据第二次轮询到第二任务的时刻和第二任务中保存的第二时刻自行确定出下一次开始任务轮询的时刻,由此负责第一队列的处理模块可以在不需要任务轮询的时间里休眠,并在需要任务轮询时及时开始工作,节约了资源,提高了效率。

接下来介绍当一个具有时延时间的任务创建时,如何被加入到队列中。可选的,参见附图5,将任务排布到设置的多个队列中的具体方法包括:

s501:获取第三任务,所述第三任务为具有时延时间的任务。

举例说明,第三任务可以是一个刚被创建的具有时延时间的任务。

s502:将所述第三任务排布到所述多个队列中的第三队列中,所述第三任务的时延时间处于所述第三队列对应的时间区间中。

也就是说,队列对应的时间区间可以作为新创建的任务的排布依据,可以根据新创建任务的时延时间选择可以排布该任务的队列。其中,还需要进行说明的是,第三队列可以是上述本发明实施提及的第一队列或者第二队列,也可以所设置多个队列中的其他队列。本发明也不限定第三任务排布在第三队列中的具体位置。

举例说明,当一个处理模块作为多个队列中任务轮询的执行主体时,用户提交一个任务后,处理模块首先获取该任务,其次计算这个任务距离被执行剩余的时间,即时延时间,根据时延时间将任务放入相应的队列中,例如:假设计算机系统中包括6个队列时,6个队列分别对应有各自的时间区间:队列d的时间区间是大于3200秒,队列e的时间区间是800秒~3200秒,队列f的时间区间是200秒~800秒,队列g的时间区间是40秒~200秒,队列h的时间区间是10秒~40秒,队列i的区间是小于10秒。当计算到某一任务距离被执行剩余的时间是3405秒,由于3405秒大于3200秒,则将该任务排布到队列d中。同样的,当处理模块计算到用户提交的任务距离被执行需要的时间是520秒,由于520秒处于200秒~800秒的时间区间,则将该任务排布到队列f中。

图6为本发明实施例提供的一种任务轮询装置的装置结构图,应用于计算机系统,所述计算机系统中设置了具有对应时间区间的多个队列,所述多个队列中的每个队列用于排布时延时间符合所对应时间区间的任务,所述多个队列至少包括第一队列和第二队列,所述第一队列的轮询周期大于所述第二队列的轮询周期,所述装置包括轮询单元601、计算单元602、判断单元603和排布单元604:

所述轮询单元601,用于根据所述第一队列的轮询周期轮询所述第一队列中排布的任务。

所述计算单元602,用于计算被轮询到任务的时延时间。

所述判断单元603,用于判断被轮询到的任务的时延时间所处的时间区间;其中,在判断第一任务的时延时间所处的时间区间时,所述第一任务为所述第一队列所排布任务中的一个任务;若所述第一任务的时延时间处于所述第二队列所对应的时间区间中,触发所述排布单元604。

所述排布单元604,用于将所述第一任务从所述第一队列中取出,并排布到所述第二队列中。

上述各个单元的描述请参见图2所对应实施例中的相关描述,这里不再一一赘述。

可选的,所述判断单元还用于当所述第一任务的时延时间小于等于0时,将所述第一任务从所述第一队列中取出,并执行所述第一任务。

可选的,所述第一队列对应的时间区间与所述第二队列对应的时间区间不重叠。

可选的,所述轮询单元还用于为第二任务设置标记,所述第二任务为在所述第一队列的轮询周期中轮询到的第一个任务;轮询完所述第二任务后,将所述第二任务排布到所述第一队列的队尾;依据队列排布顺序依次轮询所述第一队列中的任务,并在轮询完一个任务后将这个任务排布到所述第一队列的队尾;当轮询到具有所述标记的所述第二任务时,取消所述第二任务的标记并结束轮询。

可选的,所述轮询单元还用于将第二时刻保存到所述第二任务中,所述第二时刻为通过第一时刻和所述第一队列的轮询周期确定,所述第一时刻为标记所述第二任务的时刻;从所述第二任务中获取所述第二时刻;根据第三时刻和所述第二时刻确定出下一次对所述第一队列进行轮询的时刻,所述第三时刻为轮询到具有所述标记的所述第二任务的时刻。

可选的,所述判断单元还用于判断所述第一队列中是否排布有任务;若没有排布任务,则等待一个所述第一队列的轮询周期后再次执行所述判断所述第一队列中是否排布有任务。

可选的,所述多个队列的队列类型包括设置在内存中的内存队列、设置在磁盘中的文件队列、设置在数据库中的表结构形式的队列中任意一个或多个的组合。

可选的,所述多个队列中轮询周期最短的队列为设置在内存中的内存队列。

可选的,所述装置还包括获取单元:

所述获取单元,用于获取第三任务,所述第三任务为具有时延时间的任务;

所述排布单元还用于将所述第三任务排布到所述多个队列中的第三队列中,所述第三任务的时延时间处于所述第三队列对应的时间区间中。

可见,在计算机系统中设置多个用于排布任务的队列,队列中所排布任务的时延时间符合该队列所对应的时间区间,由于时延时间处于不同时间区间的任务被分散的排布在不同队列中,故对于一个队列所轮询的仅是这个队列中的任务,所以一次需要轮询任务的数量显然比传统方式中一次需要轮询计算机系统中全部任务的数量要少。对于该多个队列中的第一队列,根据第一队列的轮询周期轮询第一队列中的任务,并计算轮询到任务的时延时间,若轮询到第一任务的时延时间处于该多个队列中第二队列对应的时间区间内,则将第一任务从第一队列中取出并排布到轮询周期较小的第二队列中,可见,第一任务的时延时间较长时可以放在轮询周期较长的第一队列中,避免了频繁轮询第一任务,节约了系统资源。当第一任务的时延时间较短时可以排布到轮询周期较短的第二队列,通过较为频繁的轮询以提高第一任务的时延时间归零时可以被及时执行的可能性。

图7为本发明实施例提供的一种任务排布方法的方法流程图,应用于计算机系统,所述计算机系统中设置了具有对应时间区间的多个队列,在所述多个队列中的每个队列用于排布时延时间符合这个队列所对应时间区间的任务,所述方法包括:

s701:获取任务,所述任务为具有时延时间的任务。

s702:若所述任务的时延时间处于目标队列对应的时间区间中,将所述任务排布到所述目标队列中,所述目标队列为所述多个队列中的一个队列。

也就是说,队列对应的时间区间可以作为新创建的任务的排布依据,而新创建的任务可以是s701中获取的任务。

由于每个队列都具有对应的时间区间,故可以根据新创建任务的时延时间选择出符合排布该任务要求的队列,或者说,若该任务的时延时间落入该多个队列中的一个队列所对应的时间区间,那么这个队列便可以是s702中的目标队列,可以将该任务排布到这个队列中。

其中,还需要进行说明的是,本发明不限定该任务排布在目标队列中的具体位置。

可选的,所述多个队列至少包括第一队列和第二队列,所述第一队列的轮询周期大于所述第二队列的轮询周期,所述方法包括:

根据所述第一队列的轮询周期轮询所述第一队列中排布的任务;

计算被轮询到任务的时延时间;

判断被轮询到的任务的时延时间所处的时间区间;其中,在判断第一任务的时延时间所处的时间区间时,所述第一任务为所述第一队列所排布任务中的一个任务;

若所述第一任务的时延时间处于所述第二队列所对应的时间区间中,将所述第一任务从所述第一队列中取出,并排布到所述第二队列中。

可选的,所述多个队列的队列类型包括设置在内存中的内存队列、设置在磁盘中的文件队列、设置在数据库中的表结构形式的队列中任意一个或多个的组合。

可选的,所述多个队列中轮询周期最短的队列为设置在内存中的内存队列。

可见,由于时延时间处于不同时间区间的任务被分散的排布在不同队列中,故对于一个队列所轮询的仅是这个队列中的任务,所以一次需要轮询任务的数量显然比传统方式中一次需要轮询计算机系统中全部任务的数量要少。可以有效减少甚至杜绝由于没有及时轮询到导致一些时延时间已经归零、本该执行的任务被拖延的问题。

图8为本发明实施例提供的一种任务排布装置的装置结构图,应用于计算机系统,所述计算机系统中设置了具有对应时间区间的多个队列,在所述多个队列中的每个队列用于排布时延时间符合这个队列所对应时间区间的任务,所述装置包括获取单元801和排布单元802:

所述获取单元801,用于获取任务,所述任务为具有时延时间的任务;

所述排布单元802,用于若所述任务的时延时间处于目标队列对应的时间区间中,将所述任务排布到所述目标队列中,所述目标队列为所述多个队列中的一个队列。

可选的,所述多个队列至少包括第一队列和第二队列,所述第一队列的轮询周期大于所述第二队列的轮询周期,所述装置还包括轮询单元、计算单元、判断单元和排布单元:

所述轮询单元,用于根据所述第一队列的轮询周期轮询所述第一队列中排布的任务;

所述计算单元,用于计算被轮询到任务的时延时间;

所述判断单元,用于判断被轮询到的任务的时延时间所处的时间区间;其中,在判断第一任务的时延时间所处的时间区间时,所述第一任务为所述第一队列所排布任务中的一个任务;若所述第一任务的时延时间处于所述第二队列所对应的时间区间中,触发所述排布单元;

所述排布单元,用于将所述第一任务从所述第一队列中取出,并排布到所述第二队列中。

可选的,所述多个队列的队列类型包括设置在内存中的内存队列、设置在磁盘中的文件队列、设置在数据库中的表结构形式的队列中任意一个或多个的组合。

可选的,所述多个队列中轮询周期最短的队列为设置在内存中的内存队列。

可见,由于时延时间处于不同时间区间的任务被分散的排布在不同队列中,故对于一个队列所轮询的仅是这个队列中的任务,所以一次需要轮询任务的数量显然比传统方式中一次需要轮询计算机系统中全部任务的数量要少。可以有效减少甚至杜绝由于没有及时轮询到导致一些时延时间已经归零、本该执行的任务被拖延的问题。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质可以是下述介质中的至少一种:只读存储器(英文:read-onlymemory,缩写:rom)、ram、磁碟或者光盘等各种可以存储程序代码的介质。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备及系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的设备及系统实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1