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

文档序号:9547686阅读:230来源:国知局
一种分配工作任务的方法及装置的制造方法
【技术领域】
[0001]本发明实施例涉及信息系统的技术领域,尤其涉及一种分配工作任务的方法及装置。
【背景技术】
[0002]信息系统中工作项是有优先级顺序的,要求排在前面的工作项先被处理,而且同一个工作项只能发给一个请求者。在多个人获取工作项时,要求按请求者到达的先后顺序按序发放工作项,最先请求者取得排在最前面的工作项,第二位请求者取得第2个工作项,后面的请求者以此类推。
[0003]针对这种需求,通常的做法是将工作项按序放到内存队列中,这些队列的实现方式有多种多样,数组、列表、或链表等都可以;当有请求者请求任务时,锁住整个队列,然后取出最靠前的一个工作项,最后释放对此队列的锁。在一个请求者对此队列加锁的过程中,其他请求者只能等待。这种内存队列加锁的方案保证了任务是按序下发的,同时保证了同一个工作项不会分发给两个以上的请求者,而且由于采用的是内存队列,相比直接从数据库或硬盘文件中获取任务来讲,大大提高了性能。
[0004]但这种采用对共享内存队列加锁的方式有明显的弊端:第一,会导致资源开销;第二,会阻塞其他线程的执行,使得1个线程占有锁的过程中其它线程只能等待,被阻塞的线程会被系统暂停任务的执行或使其进入睡眠状态而不占用处理器,直到取得队列锁,该被阻塞的线程才能被唤醒,大量的时间浪费在了睡眠等待、抢占锁、唤醒上,其导致的结果是处理速度慢、支持的并发数少,不能满足大量作业人员并发获取工作项的需要。

【发明内容】

[0005]本发明实施例的目的在于提出一种分配工作任务的方法及装置,旨在解决如何实现高效的多线程并发获取工作项任务的问题。
[0006]为达此目的,本发明实施例采用以下技术方案:
[0007]第一方面,一种分配工作任务的方法,所述方法包括:
[0008]装载工作项任务队列到二维数组中,二维数组的一维表示工作项类型,另一维表示具体的工作项任务队列,并为每个工作项类型设置工作项序号取值范围;
[0009]获取用户发送的处理工作任务的请求;
[0010]为所述请求创建任务分配线程;
[0011]通过所述任务分配线程执行原子操作,为所述请求分配工作项序号;
[0012]若所分配的工作项序号超过所述工作项类型对应的工作项序号取值范围则返回没有任务,否则,根据所述工作项序号提取工作任务,发送给所述用户。
[0013]优选地,通过所述任务分配线程执行原子操作,为所述请求分配工作项序号包括:
[0014]通过所述任务分配线程,将工作项序号器的计数值按照设定规则进行计算,计算确定的数值作为分配的工作项序号;
[0015]将工作项序号器的计数值加1或减1,得到的数值作为分配的工作项序号。
[0016]优选地,所述通过所述任务分配线程,将工作项序号器的计数值按照设定规则进行计算,计算确定的数值作为分配的工作项序号之前,还包括:
[0017]确定所述请求是否包括预先设置的工作项类型参数;
[0018]若确定所述请求包括预先设置的工作项类型参数,则通过原子操作为所述请求分配与所述工作项类型参数对应的工作项类型序号;
[0019]若确定所述请求未包括预先设置的工作项类型参数,则为所述请求分配工作项类型序号;
[0020]根据所述工作项类型参数,确定对应的工作项序号器。
[0021]优选地,所述为所述请求分配工作项类型序号,包括:
[0022]执行原子操作将工作项类型序号器的当前计数值加1或减1,得到新计数值;
[0023]若新计数值超出工作项类型序号的取值范围,则将工作项类型序号器计数值设为取值范围的最小值或最大值,并将此修改后的数值作为新计数值;
[0024]将新数值作为分配给所述请求的工作项类型序号。
[0025]优选地,所述根据所述工作项序号提取工作任务,发送给所述用户,包括:
[0026]根据所述工作项类型序号和工作项序号从预先存储的二维数组中获取工作任务,所述二维数组的行序号对应于工作项类型序号,列序号对应于工作项序号。
[0027]优选地,所述方法还包括:
[0028]所述所分配的工作项序号如果超过所属工作项类型对应的工作项序号取值范围,则如果该工作项类型的任务装载线程没有启动,则启动该工作项类型的任务装载线程,否贝1J,不需要进行启动任务装载线程;
[0029]工作项类型的任务装载线程首先设置该工作项类型的工作项序号取值范围为空,清空所述二维数组中所述工作项类型序号对应的所有工作任务,并重新装载该工作项类型的工作任务到二维数组中,并设置该工作项类型的工作项序号取值范围与所装载的工作项个数相匹配。
[0030]第二方面,一种获取工作任务的装置,所述装置包括:
[0031]装载模块,用于装载工作项任务队列到二维数组中,二维数组的一维表示工作项类型,另一维表示具体的工作项任务队列,并为每个工作项类型设置工作项序号取值范围;
[0032]第一获取模块,用于获取用户发送的处理工作任务的请求;
[0033]创建模块,用于为所述请求创建任务分配线程;
[0034]第一分配模块,用于通过所述任务分配线程执行原子操作,为所述请求分配工作项序号;
[0035]发送模块,若所分配的工作项序号超过所述工作项类型对应的工作项序号取值范围则返回没有任务,否则,根据所述工作项序号提取工作任务,发送给所述用户。
[0036]优选地,所述第一分配模块,包括:
[0037]计算单元,用于通过所述任务分配线程,将工作项序号器的计数值按照设定规则进行计算,计算确定的数值作为分配的工作项序号;
[0038]所述计算单元,用于:
[0039]通过所述任务分配线程,将工作项序号器的计数值加1或减1,确定的数值作为分配的工作项序号。
[0040]优选地,所述装置还包括:
[0041]第一确定模块,用于在通过所述任务分配线程,将工作项序号器的计数值按照设定规则进行计算,计算确定的数值作为分配的工作项序号之前,确定所述请求是否包括预先设置的工作项类型参数;
[0042]第二分配模块,用于若确定所述请求包括预先设置的工作项类型参数,则通过原子操作为所述请求分配与所述工作项类型参数对应的工作项类型序号;
[0043]第三分配模块,用于若确定所述请求未包括预先设置的工作项类型参数,则为所述请求分配工作项类型序号;
[0044]第二确定模块,用于根据所述工作项类型参数,确定对应的工作项序号器。
[0045]优选地,所述第三分配模块,用于:
[0046]执行原子操作将工作项类型序号器的当前计数值加1或减1,得到新计数值;
[0047]若新计数值超出工作项类型序号的取值范围,则将工作项类型序号器计数值设为取值范围的最小值或最大值,并将此修改后的数值作为新计数值;
[0048]将新数值作为分配给所述请求的工作项类型序号。
[0049]优选地,所述发送模块,用于:
[0050]根据所述工作项类型序号和工作项序号从预先存储的二维数组中获取工作任务,所述二维数组的行序号对应于工作项类型序号,列序号对应于工作项序号。
[0051 ] 优选地,所述装置还包括:
[0052]启动模块,用于所述所分配的工作项序号如果超过所属工作项类型对应的工作项序号取值范围,则如果该工作项类型的任务装载线程没有启动,则启动该工作项类型的任务装载线程,否则,不需要进行启动任务装载线程;
[0053]处理模块,用于工作项类型的任务装载线程首先设置该工作项类型的工作项序号取值范围为空,清空所述二维数组中所述工作项类型序号对应的所有工作任务,并重新装载该工作项类型的工作任务到二维数组中,并设置该工作项类型的工作项序号取值范围与所装载的工作项个数相匹配。
[0054]本发明实施例通过装载工作项任务队列到二维数组中,二维数组的一维表示工作项类型,另一维表示具体的工作项任务队列,并为每个工作项类型设置工作项序号取值范围,获取用户发送的处理工作任务的请求;为所述请求创建任务分配线程,弃用加锁、解锁处理,减少排队、耗时等的处理,支持多路并发的用户发送的工作任务的请求;通过所述任务分配线程执行原子操作,为所述请求分配工作项序号;若所分配的工作项序号超过所述工作项类型对应的工作项序号取值范围则返回没有任务,否则,根据所述工作项序号提取工作任务,发送给所述用户,从而实现多路并发请求工作任务的目的,极大的提高系统处理性能。
【附图说明】
[0055]图1是本发明实施例分配工作任务的方法第一实施例的流程示意图;
[0056]图2是本发明实施例分配工作任务的方法第二实施例的流程示意图;
[0057]图3是本发明实施例提供的另一分配工作任务的方法的示意图;
[0058]图4是本发明实施例分配工作任务的装置的功能模块示意图;
[0059]图5是本发明实施例第一分配模块504的功能模块不意图;
[0060]图6是本发明实
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1