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

文档序号:9547686阅读:来源:国知局
[0111]参考图3,图3是本发明实施例提供的另一分配工作任务的方法的示意图。
[0112]将工作项任务一次性读入二维数组workItem[m] [η]中,其中m、n为自然数;多个用户并发访问系统请求工作项任务。
[0113]步骤301,系统为每个请求创建一个线程。
[0114]步骤302,线程判断用户请求的工作项类型参数,若没有指定工作项类型,那么执行线程执行原子操作为请求分配工作项类型,该操作为原子操作,它的功能是把工作项类型序号器(或称为工作项类型指针)typeNo增加1 (或者减去1),具体逻辑是:若typeNo小于m (或者大于0),那么为typeNo增加1 (或者减去1),否则,将typeNo设为0 (或者m-Ι);
[0115]否则,将typeNo设为指定的工作项类型对应的工作项类型序号,typeNo的取值范围为0到m-Ι,执行步骤403 ;
[0116]步骤303,根据typeNo找到对应的工作项序号器(或称为工作项指针)itemNo ;线程执行原子操作为请求分配工作项序号,该操作为原子操作,它的功能是把工作项序号器itemNo增加1 (或者减去1),具体逻辑是:若itemNo小于该队列的长度(或者大于0),那么为itemNo增加1 (或者减去1),否则,将itemNo设为0 (或者该队列长度-1)。
[0117]步骤304,线程根据上述步骤获得的工作项序号和工作项序号直接从二维数组中取得工作项内容,即workltem[typeNo] [itemNo]。并将数组中此工作项单元格置空。
[0118]新工作项放入系统工作项队列的方法是:
[0119]专门的守护线程每隔一个小的时间周期轮询判断队列中的工作项是否都已被获取。若是,那么清空此队列并从数据库加载工作项任务填充到此队列中,然后设置该队列的itemNo为0(或者队列长度-1)。否则,等待下一次轮询判断。
[0120]本发明实施例通过装载工作项任务队列到二维数组中,二维数组的一维表示工作项类型,另一维表示具体的工作项任务队列,获取用户发送的处理工作任务的请求;为所述请求创建任务分配线程,弃用加锁、解锁处理,减少排队、耗时等的处理,支持多路并发的用户发送的工作任务的请求;通过所述任务分配线程执行原子操作,为所述请求分配工作项序号;若所分配的工作项序号超过所述工作项类型对应的工作项序号取值范围则返回没有任务,否则,根据所述工作项序号提取工作任务,发送给所述用户,从而采用轻量级的数组操作实现多路并发请求工作任务的目的,极大的提高系统处理性能;通过及时有效清空数据组存储的工作项内容,提高系统的存储空间,进而提高系统分配工作任务的效率。
[0121]实施例四
[0122]参考图4,图4是本发明实施例分配工作任务的装置的功能模块示意图。
[0123]在实施例四中,所述分配工作任务的装置包括:
[0124]装载模块401,用于装载工作项任务队列到二维数组中,二维数组的一维表示工作项类型,另一维表示具体的工作项任务队列,并为每个工作项类型设置工作项序号取值范围;
[0125]第一获取模块402,用于获取用户发送的处理工作任务的请求;
[0126]创建模块403,用于为所述请求创建任务分配线程;
[0127]具体的,在多个用户并发向服务器发送处理工作任务的请求时,为每个用户创建一个线程,对每个用户的请求进行分别处理。
[0128]第一分配模块404,用于通过所述任务分配线程执行原子操作,为所述请求分配工作项序号;
[0129]其中,所述原子操作是在在多线程访问资源时,能够确保所有其他的进线程都不在同一时间内访问相同的资源。原子操作是不可分割的,在执行完毕之前不会被任何其它任务或事件中断。
[0130]优选地,参考图5,图5是本发明实施例第一分配模块404的功能模块示意图。所述第一分配模块404,包括:
[0131]计算单元501,用于通过所述任务分配线程,将工作项序号器的计数值按照设定规则进行计算,计算确定的数值作为分配的工作项序号。
[0132]优选地,所述计算单元501,用于:
[0133]通过所述任务分配线程,将工作项序号器的计数值加1或减1,确定的数值作为分配的工作项序号。
[0134]优选地,参考图6,图6是本发明实施例分配工作任务的装置的功能模块示意图。所述装置还包括:
[0135]第一确定模块406,用于在通过所述任务分配线程,将工作项序号器的计数值按照设定规则进行计算,计算确定的数值作为分配的工作项序号之前,确定所述请求是否包括预先设置的工作项类型参数;
[0136]第二分配模块407,用于若确定所述请求包括预先设置的工作项类型参数,则通过原子操作为所述请求分配与所述工作项类型参数对应的工作项类型序号;
[0137]第三分配模块408,用于若确定所述请求未包括预先设置的工作项类型参数,则为所述请求分配工作项类型序号;
[0138]优选地,所述第三分配模块408,用于:
[0139]执行原子操作将工作项类型序号器的当前计数值加1或减1,得到新计数值;
[0140]若新计数值超出工作项类型序号的取值范围,则将工作项类型序号器计数值设为取值范围的最小值或最大值,并将此修改后的数值作为新计数值;
[0141]将新数值作为分配给所述请求的工作项类型序号。
[0142]第二确定模块409,用于根据所述工作项类型参数,确定对应的工作项序号器。
[0143]具体的,不同类型的工作项任务是指工作项分为多种类型,例如数字录入工作项、金额录入工作项、姓名录入工作项等等;不同的请求者能获取的工作项类型不同。
[0144]线程判断用户请求的工作项类型参数,若没有指定工作项类型,则分为两种情况进行处理:
[0145]第一种情况,若确定所述请求未包括预先设置的工作项类型参数,则为所述请求分配所述二维数组中的任意一个工作项类型序号,即若用户未明确任何工作项类型参数,则从二维数组中任意选取一个工作项类型对应的行;
[0146]第二种情况,若确定所述请求未包括预先设置的工作项类型参数,则根据为上一次未包括所述预先设置的工作项类型参数请求所分配的工作项类型序号,分配所述请求的工作项类型序号;
[0147]所述根据为上一次未包括所述预先设置的工作项类型参数请求所分配的工作项类型序号,分配所述请求的工作项类型序号,包括:
[0148]若为上一次未包括所述预先设置的工作项类型参数请求所分配的工作项类型序号为y,则为所述请求分配的工作项类型序号为y+Ι ;或者,
[0149]若为上一次未包括所述预先设置的工作项类型参数请求所分配的工作项类型序号为y,则为所述请求分配的工作项类型序号为y_l,y大于0,y的数值不大于总的所述工作项类型的个数。
[0150]具体的,若上一次请求的是二维数组中的第m-Ι行,则将当前请求分配的工作项类型序号为m ;若上一次请求的是二维数组中的第m-Ι行,则将当前请求分配的工作项类型序号为m-2。
[0151]优选地,所述根据已分配的所述工作项类型序号中的上一个工作项序号,为所述请求分配工作项序号,包括:
[0152]若已分配的所述工作项类型序号中的上一个工作项序号为X,则为所述请求分配的工作项序号为χ+1 ;或者,
[0153]若已分配的所述工作项类型序号中的上一个工作项序号为X,则为所述请求分配的工作项序号为χ-1,X不大于所述工作项类型对应的总的工作任务。
[0154]具体的,若用户请求某个特定的工作类型,某个特定的工作类型对应的行序号为2,则获取该行序号对应的工作任务的列序号,若上一次请求该行序号的工作任务的列序号为3,则当前请求该行序号的工作任务的列序号为2或者4。
[0155]发送模块405,用于若所分配的工作项序号超过所述工作项类型对应的工作项序号取值范围则返回没有任务,否则,根据所述工作项序号提取工作任务,发送给所述用户。
[0156]优选地,所述发送模块405,用于:
[0157]根据所述工作项类型序号和工作项序号从预先存储的二维数组中获取工作任务,所述二维数组的行序号对应于工作项类型序号,列序号对应于工作项序号。
[0158]具体的,通过用二维数组存放工作任务,例如,二维数组的形式为workl tem [m][η],其中第一维m表示工作项类型序号,每种工作项类型对应一个工作项队列;第二维是该类型下具体的工作项内容。设置一个工作项类型序号器typeNo。每个工作项类型对应的工作项队列里设置一个工作项序号器itemNo,它小于该队列的长度。这样以来,若有m个工作项类型,那么就对应有m个itemNo序号器。
[0159]二维数组的行序号和列序号分别从1开始计算。二维数组的行存储不同的工作类型时,应预先设置各行对应的工作类型的序号,保证分配的行序号、列序号能对应到所述二维数组对应的行和列。
[0160]本发明实施例通过装载工作项任务队列到二维数组中,二维数组的一维表示工作项类型,另一维表示具体的工作项任务队列,获取用户发
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1