当前位置: 首页 > 专利查询>浙江大学专利>正文

一种基于任务分解的并行任务处理方法技术

技术编号:11766438 阅读:117 留言:0更新日期:2015-07-23 18:20
本发明专利技术公开了一种基于任务分解的并行任务处理方法,该方法事件触发对象不需要经由多个队列的顺序传递,对象插入哪个对列是由对象自身的状态参量决定的,线程不需要了解它所操作的对象从哪个任务队列传递过来,将要进入哪个任务队列,只需完成自身的任务处理。事件触发对象、任务队列和线程不相互影响,便于类的封装。当业务的多个子任务不具有顺序相关性时,可将其同时插入多个队列,进行子任务的并行化处理。为各类任务分配固定数量的处理线程组,无需为每个对象创建一个专用线程。

【技术实现步骤摘要】

本专利技术涉及计算机应用领域,尤其涉及并行任务处理领域。
技术介绍
图1为基于线程的串行任务处理模型。为了不阻塞任务读取线程,向线程池申请一个独立线程进行任务处理,任务持行完成后,将其归还线程池重用。这种任务处理模型虽然实现了任务的并发处理,但当任务包括多个其他类型的子任务时,工作线程只能对子任务进行顺序处理。串行任务处理模型主要有以下缺点: (I)并发量较高时,线程池必须为每个触发事件分配一个线程,线程上下文的切换、内存同步等都将引入额外开销。(2)需要开发者了解任务处理的细节,设计专一化的类结构,不符合面向对象和设计模式的程序设计思想,不利于业务的更新和维护。
技术实现思路
本专利技术的目的在于针对现有技术的问题,提供。本专利技术的目的是通过以下技术方案来实现的:,包括以下步骤:(1)创建任务分解队列、任务分配队列、响应过滤队列以及各类任务处理队列;所述任务分解队列、任务分配队列、响应过滤队列以及各类任务处理队列均基于阻塞队列实现;(2)创建任务分解线程、任务分配线程、响应过滤线程组以及各类任务处理线程组; (3)任务分解线程从任务分解队列中获得任务对象,根据任务对象的任务编码进行子任务分解,并将子任务存入任务哈希表,分解完成后,将任务对象存入任务分配队列;所述任务对象由任务编码、任务参数和任务哈希表构成;所述任务哈希表以任务名为key,任务项为value ;任务项包括任务参数、任务状态和下级任务;任务状态标识符分为:has_neXt(存在下级任务)和done (所有任务均处理完成); (4)任务分配线程从任务分配队列中读取任务对象,根据任务哈希表中的任务名,将任务对象分别存入对应任务处理队列; (5)各类任务处理线程从任务处理队列中获得任务对象进行处理,任务完成后,存储任务响应,更新任务状态标识符,将任务对象插入到响应过滤队列; 所述任务响应的存储方式为替换当前任务项中任务参数;所述更新任务状态标识符具体为:任务处理线程判断下级任务字段是否为空,若不为空,则用下级任务名替换当前任务名,更新任务状态标识符为haS_next,并将任务对象插入下级任务对应的任务处理队列;若下级任务字段为空,则将任务状态标识符更新为done,并将任务对象存入响应过滤队列;(6)响应过滤线程从响应过滤队列中获取任务对象,判断任务哈希表中每一个任务项的任务状态标识符是否为done,若有任务状态不为done,则删除该任务对象,等待所有子任务处理完成;若所有任务状态均为done,则根据任务编码和子任务响应构建整体任务响应,完成任务的并发处理。本专利技术方法具有如下特点: (I)当业务的多个子任务不具有顺序相关性时,可将其同时插入多个队列,进行子任务的并行化处理。(2)事件触发对象不需要经由多个队列的顺序传递,对象插入哪个对列是由对象自身的状态参量决定的,线程不需要了解它所操作的对象从哪个任务队列传递过来,将要进入哪个任务队列,只需完成自身的任务处理。事件触发对象、任务队列和线程不相互影响,便于类的封装。(3)为各类任务分配固定数量的处理线程组,无需为每个对象创建一个专用线程。【附图说明】图1基于线程的串行任务处理模型; 图2基于任务分解的并行任务处理。【具体实施方式】下面结合附图和具体实施例对本专利技术作进一步详细说明。本专利技术,包括以下步骤: (1)创建任务分解队列、任务分配队列、响应过滤队列以及各类任务处理队列;所述任务分解队列、任务分配队列、响应过滤队列以及各类任务处理队列均基于阻塞队列实现; (2)创建任务分解线程、任务分配线程、响应过滤线程组以及各类任务处理线程组; (3)任务分解线程从任务分解队列中获得任务对象,根据任务对象的任务编码进行子任务分解,并将子任务存入任务哈希表,分解完成后,将任务对象存入任务分配队列;所述任务对象由任务编码、任务参数和任务哈希表构成;所述任务哈希表以任务名为key,任务项为value ;任务项包括任务参数、任务状态和下级任务;任务状态标识符分为:has_neXt(存在下级任务)和done (所有任务均处理完成); (4)任务分配线程从任务分配队列中读取任务对象,根据任务哈希表中的任务名,将任务对象分别存入对应任务处理队列; (5)各类任务处理线程从任务处理队列中获得任务对象进行处理,任务完成后,存储任务响应,更新任务状态标识符,将任务对象插入到响应过滤队列; 所述任务响应的存储方式为替换当前任务项中任务参数;所述更新任务状态标识符具体为:任务处理线程判断下级任务字段是否为空,若不为空,则用下级任务名替换当前任务名,更新任务状态标识符为haS_next,并将任务对象插入下级任务对应的任务处理队列;若下级任务字段为空,则将任务状态标识符更新为done,并将任务对象存入响应过滤队列; (6)响应过滤线程从响应过滤队列中获取任务对象,判断任务哈希表中每一个任务项的任务状态标识符是否为done,若有任务状态不为done,则删除该任务对象,等待所有子任务处理完成;若所有任务状态均为done,则根据任务编码和子任务响应构建整体任务响应,完成任务的并发处理。如图2所示,主线程读取到待处理任务后,将其插入任务队列进行缓存。任务队列实现统一的阻塞任务队列接口,即使扩展新业务,也只需要开发新的业务子类,对原有程序结构不造成任何影响。线程池为每个任务队列分配若干线程,当任务队列为空时,线程在队列的对象锁上阻塞等待,直到队列中有新任务,线程被唤起并抢占任务,完成任务处理。【主权项】1.,其特征在于,包括以下步骤: (1)创建任务分解队列、任务分配队列、响应过滤队列以及各类任务处理队列;所述任务分解队列、任务分配队列、响应过滤队列以及各类任务处理队列均基于阻塞队列实现; (2)创建任务分解线程、任务分配线程、响应过滤线程组以及各类任务处理线程组; (3)任务分解线程从任务分解队列中获得任务对象,根据任务对象的任务编码进行子任务分解,并将子任务存入任务哈希表,分解完成后,将任务对象存入任务分配队列;所述任务对象由任务编码、任务参数和任务哈希表构成;所述任务哈希表以任务名为key,任务项为value ;任务项包括任务参数、任务状态和下级任务;任务状态标识符分为:has_neXt(存在下级任务)和done (所有任务均处理完成); (4)任务分配线程从任务分配队列中读取任务对象,根据任务哈希表中的任务名,将任务对象分别存入对应任务处理队列; (5)各类任务处理线程从任务处理队列中获得任务对象进行处理,任务完成后,存储任务响应,更新任务状态标识符,将任务对象插入到响应过滤队列; 所述任务响应的存储方式为替换当前任务项中任务参数;所述更新任务状态标识符具体为:任务处理线程判断下级任务字段是否为空,若不为空,则用下级任务名替换当前任务名,更新任务状态标识符为haS_next,并将任务对象插入下级任务对应的任务处理队列;若下级任务字段为空,则将任务状态标识符更新为done,并将任务对象存入响应过滤队列; (6)响应过滤线程从响应过滤队列中获取任务对象,判断任务哈希表中每一个任务项的任务状态标识符是否为done,若有任务状态不为done,则删除该任务对象,等待所有子任务处理完成;若所有本文档来自技高网...
一种<a href="http://www.xjishu.com/zhuanli/55/CN104793992.html" title="一种基于任务分解的并行任务处理方法原文来自X技术">基于任务分解的并行任务处理方法</a>

【技术保护点】
一种基于任务分解的并行任务处理方法,其特征在于,包括以下步骤:(1)创建任务分解队列、任务分配队列、响应过滤队列以及各类任务处理队列;所述任务分解队列、任务分配队列、响应过滤队列以及各类任务处理队列均基于阻塞队列实现;(2)创建任务分解线程、任务分配线程、响应过滤线程组以及各类任务处理线程组;(3)任务分解线程从任务分解队列中获得任务对象,根据任务对象的任务编码进行子任务分解,并将子任务存入任务哈希表,分解完成后,将任务对象存入任务分配队列;所述任务对象由任务编码、任务参数和任务哈希表构成;所述任务哈希表以任务名为key,任务项为value;任务项包括任务参数、任务状态和下级任务;任务状态标识符分为:has_next(存在下级任务)和done(所有任务均处理完成);(4)任务分配线程从任务分配队列中读取任务对象,根据任务哈希表中的任务名,将任务对象分别存入对应任务处理队列;(5)各类任务处理线程从任务处理队列中获得任务对象进行处理,任务完成后,存储任务响应,更新任务状态标识符,将任务对象插入到响应过滤队列;所述任务响应的存储方式为替换当前任务项中任务参数;所述更新任务状态标识符具体为:任务处理线程判断下级任务字段是否为空,若不为空,则用下级任务名替换当前任务名,更新任务状态标识符为has_next,并将任务对象插入下级任务对应的任务处理队列;若下级任务字段为空,则将任务状态标识符更新为done,并将任务对象存入响应过滤队列;(6)响应过滤线程从响应过滤队列中获取任务对象,判断任务哈希表中每一个任务项的任务状态标识符是否为done,若有任务状态不为done,则删除该任务对象,等待所有子任务处理完成;若所有任务状态均为done,则根据任务编码和子任务响应构建整体任务响应,完成任务的并发处理。...

【技术特征摘要】

【专利技术属性】
技术研发人员:王友钊黄静
申请(专利权)人:浙江大学
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1