[发明专利]一种分配工作任务的方法及装置有效
申请号: | 201510674211.8 | 申请日: | 2015-10-16 |
公开(公告)号: | CN105303307B | 公开(公告)日: | 2020-02-14 |
发明(设计)人: | 费振国;高昊江;李效本 | 申请(专利权)人: | 京北方信息技术股份有限公司 |
主分类号: | G06F9/50 | 分类号: | G06F9/50 |
代理公司: | 11332 北京品源专利代理有限公司 | 代理人: | 孟金喆;胡彬 |
地址: | 100089 北京市*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 分配 工作任务 方法 装置 | ||
本发明实施例公开了一种分配工作任务的方法及装置,通过装载工作项任务队列到二维数组中,二维数组的一维表示工作项类型,另一维表示具体的工作项任务队列,获取用户发送的处理工作任务的请求;为所述请求创建任务分配线程,弃用加锁、解锁处理,减少排队等待等耗时的处理,支持多路并发的用户发送的工作任务的请求;通过所述任务分配线程执行原子操作,为所述请求分配工作项序号;若所分配的工作项序号超过所述工作项类型对应的工作项序号取值范围则返回没有任务,否则,根据所述工作项序号提取工作任务,发送给所述用户。本发明的技术方案,通过任务分配线程执行原子操作,弃用加锁、解锁操作,从而实现多路并发请求工作任务的目的,极大的提高系统处理性能。
技术领域
本发明实施例涉及信息系统的技术领域,尤其涉及一种分配工作任务的方法及装置。
背景技术
信息系统中工作项是有优先级顺序的,要求排在前面的工作项先被处理,而且同一个工作项只能发给一个请求者。在多个人获取工作项时,要求按请求者到达的先后顺序按序发放工作项,最先请求者取得排在最前面的工作项,第二位请求者取得第2个工作项,后面的请求者以此类推。
针对这种需求,通常的做法是将工作项按序放到内存队列中,这些队列的实现方式有多种多样,数组、列表、或链表等都可以;当有请求者请求任务时,锁住整个队列,然后取出最靠前的一个工作项,最后释放对此队列的锁。在一个请求者对此队列加锁的过程中,其他请求者只能等待。这种内存队列加锁的方案保证了任务是按序下发的,同时保证了同一个工作项不会分发给两个以上的请求者,而且由于采用的是内存队列,相比直接从数据库或硬盘文件中获取任务来讲,大大提高了性能。
但这种采用对共享内存队列加锁的方式有明显的弊端:第一,会导致资源开销;第二,会阻塞其他线程的执行,使得1个线程占有锁的过程中其它线程只能等待,被阻塞的线程会被系统暂停任务的执行或使其进入睡眠状态而不占用处理器,直到取得队列锁,该被阻塞的线程才能被唤醒,大量的时间浪费在了睡眠等待、抢占锁、唤醒上,其导致的结果是处理速度慢、支持的并发数少,不能满足大量作业人员并发获取工作项的需要。
发明内容
本发明实施例的目的在于提出一种分配工作任务的方法及装置,旨在解决如何实现高效的多线程并发获取工作项任务的问题。
为达此目的,本发明实施例采用以下技术方案:
第一方面,一种分配工作任务的方法,所述方法包括:
装载工作项任务队列到二维数组中,二维数组的一维表示工作项类型,另一维表示具体的工作项任务队列,并为每个工作项类型设置工作项序号取值范围;
获取用户发送的处理工作任务的请求;
为所述请求创建任务分配线程;
通过所述任务分配线程执行原子操作,为所述请求分配工作项序号;
若所分配的工作项序号超过所述工作项类型对应的工作项序号取值范围则返回没有任务,否则,根据所述工作项序号提取工作任务,发送给所述用户。
优选地,通过所述任务分配线程执行原子操作,为所述请求分配工作项序号包括:
通过所述任务分配线程,将工作项序号器的计数值按照设定规则进行计算,计算确定的数值作为分配的工作项序号;
将工作项序号器的计数值加1或减1,得到的数值作为分配的工作项序号。
优选地,所述通过所述任务分配线程,将工作项序号器的计数值按照设定规则进行计算,计算确定的数值作为分配的工作项序号之前,还包括:
确定所述请求是否包括预先设置的工作项类型参数;
若确定所述请求包括预先设置的工作项类型参数,则通过原子操作为所述请求分配与所述工作项类型参数对应的工作项类型序号;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于京北方信息技术股份有限公司,未经京北方信息技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201510674211.8/2.html,转载请声明来源钻瓜专利网。