一种分配工作任务的方法及装置的制造方法_2

文档序号:9547686阅读:来源:国知局
施例分配工作任务的功能模块示意图;
[0061]图7是本发明实施例分配工作任务的功能模块示意图。
【具体实施方式】
[0062]下面结合附图和实施例对本发明实施例作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明实施例,而非对本发明实施例的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明实施例相关的部分而非全部结构。
[0063]实施例一
[0064]参考图1,图1是本发明实施例分配工作任务的方法第一实施例的流程示意图。本案适用于向用户分配工作项的情况。该方法可以由分配工作任务的装置来执行,该装置可以采用软件和/或硬件的方式实现,一般配置于用来分配工作项的服务器中。
[0065]在实施例一中,所述分配工作任务的方法包括:
[0066]步骤101,装载工作项任务队列到二维数组中,二维数组的一维表示工作项类型,另一维表示具体的工作项任务队列,并为每个工作项类型设置工作项序号取值范围;
[0067]步骤102,获取用户发送的处理工作任务的请求;
[0068]步骤103,为所述请求创建任务分配线程;
[0069]具体的,在多个用户并发向服务器发送处理工作任务的请求时,为每个请求创建一个线程,对每个用户的请求进行分别处理。
[0070]步骤104,通过所述任务分配线程执行原子操作,为所述请求分配工作项序号;
[0071]其中,所述原子操作是在在多线程访问资源时,能够确保所有其他的进线程都不在同一时间内访问相同的资源。原子操作是不可分割的,在执行完毕之前不会被任何其它任务或事件中断。
[0072]优选地,所述通过所述任务分配线程执行原子操作,为所述请求分配工作项序号包括:
[0073]通过所述任务分配线程,将工作项序号器的计数值按照设定规则进行计算,计算确定的数值作为分配的工作项序号。
[0074]优选地,通过所述任务分配线程,将工作项序号器的计数值按照设定规则进行计算,计算确定的数值作为分配的工作项序号包括:
[0075]通过所述任务分配线程,将工作项序号器的计数值加1或减1,确定的数值作为分配的工作项序号。
[0076]优选地,所述通过所述任务分配线程,将工作项序号器的计数值按照设定规则进行计算,计算确定的数值作为分配的工作项序号之前,还包括:
[0077]确定所述请求是否包括预先设置的工作项类型参数;
[0078]若确定所述请求包括预先设置的工作项类型参数,则通过原子操作为所述请求分配与所述工作项类型参数对应的工作项类型序号;
[0079]若确定所述请求未包括预先设置的工作项类型参数,则为所述请求分配工作项类型序号;
[0080]根据所述工作项类型参数,确定对应的工作项序号器。
[0081]优选地,所述为所述请求分配工作项类型序号,包括:
[0082]执行原子操作将工作项类型序号器的当前计数值加1或减1,得到新计数值;
[0083]若新计数值超出工作项类型序号的取值范围,则将工作项类型序号器计数值设为取值范围的最小值或最大值,并将此修改后的数值作为新计数值;
[0084]将新数值作为分配给所述请求的工作项类型序号。
[0085]具体的,不同类型的工作项任务是指工作项分为多种类型,例如数字录入工作项、金额录入工作项、姓名录入工作项等等;不同的请求者能获取的工作项类型不同。
[0086]线程判断用户请求的工作项类型参数,若没有指定工作项类型,则分为两种情况进行处理:
[0087]第一种情况,若确定所述请求未包括预先设置的工作项类型参数,则为所述请求分配所述二维数组中的任意一个工作项类型序号,即若用户未明确任何工作项类型参数,则从二维数组中任意选取一个工作项类型对应的行;
[0088]第二种情况,若确定所述请求未包括预先设置的工作项类型参数,则根据为上一次未包括所述预先设置的工作项类型参数请求所分配的工作项类型序号,分配所述请求的工作项类型序号;
[0089]所述根据为上一次未包括所述预先设置的工作项类型参数请求所分配的工作项类型序号,分配所述请求的工作项类型序号,包括:
[0090]若为上一次未包括所述预先设置的工作项类型参数请求所分配的工作项类型序号为y,则为所述请求分配的工作项类型序号为y+Ι ;或者,
[0091]若为上一次未包括所述预先设置的工作项类型参数请求所分配的工作项类型序号为y,则为所述请求分配的工作项类型序号为y_l,y大于0,y的数值不大于总的所述工作项类型的个数。
[0092]具体的,若上一次请求的是二维数组中的第m-1行,则将当前请求分配的工作项类型序号为m ;若上一次请求的是二维数组中的第m-1行,则将当前请求分配的工作项类型序号为m-2。
[0093]优选地,所述根据已分配的所述工作项类型序号中的上一个工作项序号,为所述请求分配工作项序号,包括:
[0094]若已分配的所述工作项类型序号中的上一个工作项序号为X,则为所述请求分配的工作项序号为χ+1 ;或者,
[0095]若已分配的所述工作项类型序号中的上一个工作项序号为X,则为所述请求分配的工作项序号为χ-1,X不大于所述工作项类型对应的总的工作任务。
[0096]具体的,若用户请求某个特定的工作类型,某个特定的工作类型对应的行序号为2,则获取该行序号对应的工作任务的列序号,若上一次请求该行序号的工作任务的列序号为3,则当前请求该行序号的工作任务的列序号为2或者4。
[0097]步骤105,若所分配的工作项序号超过所述工作项类型对应的工作项序号取值范围则返回没有任务,否则,根据所述工作项序号提取工作任务,发送给所述用户。
[0098]优选地,所述根据所述工作项序号提取工作任务,发送给所述用户,包括:
[0099]根据所述工作项类型序号和工作项序号从预先存储的二维数组中获取工作任务,所述二维数组的行序号对应于工作项类型序号,列序号对应于工作项序号。
[0100]具体的,通过用二维数组存放工作任务,例如,二维数组的形式为workltem[m][η],其中第一维m表示工作项类型序号,每种工作项类型对应一个工作项队列;第二维是该类型下具体的工作项内容。设置一个工作项类型序号器typeNo。每个工作项类型对应的工作项队列里设置一个工作项序号器itemNo,它小于该队列的长度。这样以来,若有m个工作项类型,那么就对应有m个itemNo序号器。
[0101]二维数组的行序号和列序号分别从1开始计算。二维数组的行存储不同的工作类型时,应预先设置各行对应的工作类型的序号,保证分配的行序号、列序号能对应到所述二维数组对应的行和列。
[0102]本发明实施例通过装载工作项任务队列到二维数组中,二维数组的一维表示工作项类型,另一维表示具体的工作项任务队列,获取用户发送的处理工作任务的请求;为所述请求创建任务分配线程,弃用加锁、解锁处理,减少排队、耗时等的处理,支持多路并发的用户发送的工作任务的请求;通过所述任务分配线程执行原子操作,为所述请求分配工作项序号;若所分配的工作项序号超过所述工作项类型对应的工作项序号取值范围则返回没有任务,否则,根据所述工作项序号提取工作任务,发送给所述用户,从而实现多路并发请求工作任务的目的,极大的提高系统处理性能。
[0103]实施例二
[0104]参考图2,图2是本发明实施例分配工作任务的方法第二实施例的流程示意图。
[0105]在实施例一的基础上,所述方法还包括:
[0106]步骤106,所述所分配的工作项序号如果超过所属工作项类型对应的工作项序号取值范围,则如果该工作项类型的任务装载线程没有启动,则启动该工作项类型的任务装载线程,否则,不需要进行启动任务装载线程;
[0107]步骤107,工作项类型的任务装载线程首先设置该工作项类型的工作项序号取值范围为空,清空所述二维数组中所述工作项类型序号对应的所有工作任务,并重新装载该工作项类型的工作任务到二维数组中,并设置该工作项类型的工作项序号取值范围与所装载的工作项个数相匹配。
[0108]经测试,在某种相同硬件条件情况下,用【背景技术】可以从数组(或集合)中每秒获取280个元素;用本文的方案可以从数组(或集合)中每秒获取5万个元素。
[0109]本发明实施例通过装载工作项任务队列到二维数组中,二维数组的一维表示工作项类型,另一维表示具体的工作项任务队列,获取用户发送的处理工作任务的请求;为所述请求创建任务分配线程,弃用加锁、解锁处理,减少排队、耗时等的处理,支持多路并发的用户发送的工作任务的请求;通过所述任务分配线程执行原子操作,为所述请求分配工作项序号;若所分配的工作项序号超过所述工作项类型对应的工作项序号取值范围则返回没有任务,否则,根据所述工作项序号提取工作任务,发送给所述用户,从而采用轻量级的数组操作实现多路并发请求工作任务的目的,极大的提高系统处理性能;通过及时有效清空数据组存储的工作项内容,提高系统的存储空间,进而提高系统分配工作任务的效率。
[0110]实施例三
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1