CN104793992A - 一种基于任务分解的并行任务处理方法 - Google Patents
一种基于任务分解的并行任务处理方法 Download PDFInfo
- Publication number
- CN104793992A CN104793992A CN201510188327.0A CN201510188327A CN104793992A CN 104793992 A CN104793992 A CN 104793992A CN 201510188327 A CN201510188327 A CN 201510188327A CN 104793992 A CN104793992 A CN 104793992A
- Authority
- CN
- China
- Prior art keywords
- task
- queue
- response
- processing
- thread
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Debugging And Monitoring (AREA)
- Multi Processors (AREA)
Abstract
本发明公开了一种基于任务分解的并行任务处理方法,该方法事件触发对象不需要经由多个队列的顺序传递,对象插入哪个对列是由对象自身的状态参量决定的,线程不需要了解它所操作的对象从哪个任务队列传递过来,将要进入哪个任务队列,只需完成自身的任务处理。事件触发对象、任务队列和线程不相互影响,便于类的封装。当业务的多个子任务不具有顺序相关性时,可将其同时插入多个队列,进行子任务的并行化处理。为各类任务分配固定数量的处理线程组,无需为每个对象创建一个专用线程。
Description
技术领域
本发明涉及计算机应用领域,尤其涉及并行任务处理领域。
背景技术
图1为基于线程的串行任务处理模型。为了不阻塞任务读取线程,向线程池申请一个独立线程进行任务处理,任务持行完成后,将其归还线程池重用。
这种任务处理模型虽然实现了任务的并发处理,但当任务包括多个其他类型的子任务时,工作线程只能对子任务进行顺序处理。串行任务处理模型主要有以下缺点:
(1)并发量较高时,线程池必须为每个触发事件分配一个线程,线程上下文的切换、内存同步等都将引入额外开销。
(2)需要开发者了解任务处理的细节,设计专一化的类结构,不符合面向对象和设计模式的程序设计思想,不利于业务的更新和维护。
发明内容
本发明的目的在于针对现有技术的问题,提供一种基于任务分解的并行任务处理方法。
本发明的目的是通过以下技术方案来实现的:一种基于任务分解的并行任务处理方法,包括以下步骤:
(1)创建任务分解队列、任务分配队列、响应过滤队列以及各类任务处理队列;所述任务分解队列、任务分配队列、响应过滤队列以及各类任务处理队列均基于阻塞队列实现;
(2)创建任务分解线程、任务分配线程、响应过滤线程组以及各类任务处理线程组;
(3)任务分解线程从任务分解队列中获得任务对象,根据任务对象的任务编码进行子任务分解,并将子任务存入任务哈希表,分解完成后,将任务对象存入任务分配队列;所述任务对象由任务编码、任务参数和任务哈希表构成;所述任务哈希表以任务名为key,任务项为value;任务项包括任务参数、任务状态和下级任务;任务状态标识符分为:has_next(存在下级任务)和done(所有任务均处理完成);
(4)任务分配线程从任务分配队列中读取任务对象,根据任务哈希表中的任务名,将任务对象分别存入对应任务处理队列;
(5)各类任务处理线程从任务处理队列中获得任务对象进行处理,任务完成后,存储任务响应,更新任务状态标识符,将任务对象插入到响应过滤队列;
所述任务响应的存储方式为替换当前任务项中任务参数;所述更新任务状态标识符具体为:任务处理线程判断下级任务字段是否为空,若不为空,则用下级任务名替换当前任务名,更新任务状态标识符为has_next,并将任务对象插入下级任务对应的任务处理队列;若下级任务字段为空,则将任务状态标识符更新为done,并将任务对象存入响应过滤队列;
(6)响应过滤线程从响应过滤队列中获取任务对象,判断任务哈希表中每一个任务项的任务状态标识符是否为done,若有任务状态不为done,则删除该任务对象,等待所有子任务处理完成;若所有任务状态均为done,则根据任务编码和子任务响应构建整体任务响应,完成任务的并发处理。
本发明方法具有如下特点:
(1)当业务的多个子任务不具有顺序相关性时,可将其同时插入多个队列,进行子任务的并行化处理。
(2)事件触发对象不需要经由多个队列的顺序传递,对象插入哪个对列是由对象自身的状态参量决定的,线程不需要了解它所操作的对象从哪个任务队列传递过来,将要进入哪个任务队列,只需完成自身的任务处理。事件触发对象、任务队列和线程不相互影响,便于类的封装。
(3)为各类任务分配固定数量的处理线程组,无需为每个对象创建一个专用线程。
附图说明
图1基于线程的串行任务处理模型;
图2 基于任务分解的并行任务处理。
具体实施方式
下面结合附图和具体实施例对本发明作进一步详细说明。
本发明一种基于任务分解的并行任务处理方法,包括以下步骤:
(1)创建任务分解队列、任务分配队列、响应过滤队列以及各类任务处理队列;所述任务分解队列、任务分配队列、响应过滤队列以及各类任务处理队列均基于阻塞队列实现;
(2)创建任务分解线程、任务分配线程、响应过滤线程组以及各类任务处理线程组;
(3)任务分解线程从任务分解队列中获得任务对象,根据任务对象的任务编码进行子任务分解,并将子任务存入任务哈希表,分解完成后,将任务对象存入任务分配队列;所述任务对象由任务编码、任务参数和任务哈希表构成;所述任务哈希表以任务名为key,任务项为value;任务项包括任务参数、任务状态和下级任务;任务状态标识符分为:has_next(存在下级任务)和done(所有任务均处理完成);
(4)任务分配线程从任务分配队列中读取任务对象,根据任务哈希表中的任务名,将任务对象分别存入对应任务处理队列;
(5)各类任务处理线程从任务处理队列中获得任务对象进行处理,任务完成后,存储任务响应,更新任务状态标识符,将任务对象插入到响应过滤队列;
所述任务响应的存储方式为替换当前任务项中任务参数;所述更新任务状态标识符具体为:任务处理线程判断下级任务字段是否为空,若不为空,则用下级任务名替换当前任务名,更新任务状态标识符为has_next,并将任务对象插入下级任务对应的任务处理队列;若下级任务字段为空,则将任务状态标识符更新为done,并将任务对象存入响应过滤队列;
(6)响应过滤线程从响应过滤队列中获取任务对象,判断任务哈希表中每一个任务项的任务状态标识符是否为done,若有任务状态不为done,则删除该任务对象,等待所有子任务处理完成;若所有任务状态均为done,则根据任务编码和子任务响应构建整体任务响应,完成任务的并发处理。
如图2所示,主线程读取到待处理任务后,将其插入任务队列进行缓存。任务队列实现统一的阻塞任务队列接口,即使扩展新业务,也只需要开发新的业务子类,对原有程序结构不造成任何影响。线程池为每个任务队列分配若干线程,当任务队列为空时,线程在队列的对象锁上阻塞等待,直到队列中有新任务,线程被唤起并抢占任务,完成任务处理。
Claims (1)
1.一种基于任务分解的并行任务处理方法,其特征在于,包括以下步骤:
(1)创建任务分解队列、任务分配队列、响应过滤队列以及各类任务处理队列;所述任务分解队列、任务分配队列、响应过滤队列以及各类任务处理队列均基于阻塞队列实现;
(2)创建任务分解线程、任务分配线程、响应过滤线程组以及各类任务处理线程组;
(3)任务分解线程从任务分解队列中获得任务对象,根据任务对象的任务编码进行子任务分解,并将子任务存入任务哈希表,分解完成后,将任务对象存入任务分配队列;所述任务对象由任务编码、任务参数和任务哈希表构成;所述任务哈希表以任务名为key,任务项为value;任务项包括任务参数、任务状态和下级任务;任务状态标识符分为:has_next(存在下级任务)和done(所有任务均处理完成);
(4)任务分配线程从任务分配队列中读取任务对象,根据任务哈希表中的任务名,将任务对象分别存入对应任务处理队列;
(5)各类任务处理线程从任务处理队列中获得任务对象进行处理,任务完成后,存储任务响应,更新任务状态标识符,将任务对象插入到响应过滤队列;
所述任务响应的存储方式为替换当前任务项中任务参数;所述更新任务状态标识符具体为:任务处理线程判断下级任务字段是否为空,若不为空,则用下级任务名替换当前任务名,更新任务状态标识符为has_next,并将任务对象插入下级任务对应的任务处理队列;若下级任务字段为空,则将任务状态标识符更新为done,并将任务对象存入响应过滤队列;
(6)响应过滤线程从响应过滤队列中获取任务对象,判断任务哈希表中每一个任务项的任务状态标识符是否为done,若有任务状态不为done,则删除该任务对象,等待所有子任务处理完成;若所有任务状态均为done,则根据任务编码和子任务响应构建整体任务响应,完成任务的并发处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510188327.0A CN104793992B (zh) | 2015-04-21 | 2015-04-21 | 一种基于任务分解的并行任务处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510188327.0A CN104793992B (zh) | 2015-04-21 | 2015-04-21 | 一种基于任务分解的并行任务处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104793992A true CN104793992A (zh) | 2015-07-22 |
CN104793992B CN104793992B (zh) | 2018-05-01 |
Family
ID=53558805
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510188327.0A Active CN104793992B (zh) | 2015-04-21 | 2015-04-21 | 一种基于任务分解的并行任务处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104793992B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106296129A (zh) * | 2016-08-16 | 2017-01-04 | 天脉聚源(北京)传媒科技有限公司 | 一种状态标识方法及装置 |
CN107315629A (zh) * | 2017-06-14 | 2017-11-03 | 北京小米移动软件有限公司 | 任务处理方法、装置及存储介质 |
CN107423454A (zh) * | 2017-09-22 | 2017-12-01 | 郑州云海信息技术有限公司 | 一种分布式文件系统中文件锁的处理方法、装置及设备 |
CN107741882A (zh) * | 2017-11-22 | 2018-02-27 | 阿里巴巴集团控股有限公司 | 分配任务的方法及装置和电子设备 |
CN107943567A (zh) * | 2017-10-20 | 2018-04-20 | 北京知道未来信息技术有限公司 | 一种基于amqp协议的高可靠性任务调度方法和系统 |
CN109308214A (zh) * | 2017-07-27 | 2019-02-05 | 北京京东尚科信息技术有限公司 | 数据任务处理方法和系统 |
CN110134500A (zh) * | 2019-04-15 | 2019-08-16 | 平安普惠企业管理有限公司 | 基于多线程的数据同步方法、装置、设备和存储介质 |
CN110737534A (zh) * | 2019-10-29 | 2020-01-31 | 京东数字科技控股有限公司 | 任务的处理方法、装置和服务器 |
CN115033292A (zh) * | 2022-06-16 | 2022-09-09 | 北京火山引擎科技有限公司 | 模型训练方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102455934A (zh) * | 2010-10-25 | 2012-05-16 | 北大方正集团有限公司 | 工作流的调度方法和装置 |
CN102929707A (zh) * | 2012-11-06 | 2013-02-13 | 无锡江南计算技术研究所 | 并行任务动态分配方法 |
CN104133724A (zh) * | 2014-04-03 | 2014-11-05 | 腾讯科技(深圳)有限公司 | 并发任务调度方法及装置 |
CN104166538A (zh) * | 2013-05-16 | 2014-11-26 | 北大方正集团有限公司 | 一种数据任务处理方法及系统 |
US20140380322A1 (en) * | 2013-06-24 | 2014-12-25 | Sap Ag | Task Scheduling for Highly Concurrent Analytical and Transaction Workloads |
-
2015
- 2015-04-21 CN CN201510188327.0A patent/CN104793992B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102455934A (zh) * | 2010-10-25 | 2012-05-16 | 北大方正集团有限公司 | 工作流的调度方法和装置 |
CN102929707A (zh) * | 2012-11-06 | 2013-02-13 | 无锡江南计算技术研究所 | 并行任务动态分配方法 |
CN104166538A (zh) * | 2013-05-16 | 2014-11-26 | 北大方正集团有限公司 | 一种数据任务处理方法及系统 |
US20140380322A1 (en) * | 2013-06-24 | 2014-12-25 | Sap Ag | Task Scheduling for Highly Concurrent Analytical and Transaction Workloads |
CN104133724A (zh) * | 2014-04-03 | 2014-11-05 | 腾讯科技(深圳)有限公司 | 并发任务调度方法及装置 |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106296129A (zh) * | 2016-08-16 | 2017-01-04 | 天脉聚源(北京)传媒科技有限公司 | 一种状态标识方法及装置 |
CN107315629A (zh) * | 2017-06-14 | 2017-11-03 | 北京小米移动软件有限公司 | 任务处理方法、装置及存储介质 |
CN109308214A (zh) * | 2017-07-27 | 2019-02-05 | 北京京东尚科信息技术有限公司 | 数据任务处理方法和系统 |
CN107423454A (zh) * | 2017-09-22 | 2017-12-01 | 郑州云海信息技术有限公司 | 一种分布式文件系统中文件锁的处理方法、装置及设备 |
CN107423454B (zh) * | 2017-09-22 | 2021-01-12 | 苏州浪潮智能科技有限公司 | 一种分布式文件系统中文件锁的处理方法、装置及设备 |
CN107943567A (zh) * | 2017-10-20 | 2018-04-20 | 北京知道未来信息技术有限公司 | 一种基于amqp协议的高可靠性任务调度方法和系统 |
CN107943567B (zh) * | 2017-10-20 | 2021-12-28 | 北京知道未来信息技术有限公司 | 一种基于amqp协议的高可靠性任务调度方法和系统 |
CN107741882B (zh) * | 2017-11-22 | 2021-08-20 | 创新先进技术有限公司 | 分配任务的方法及装置和电子设备 |
CN107741882A (zh) * | 2017-11-22 | 2018-02-27 | 阿里巴巴集团控股有限公司 | 分配任务的方法及装置和电子设备 |
CN110134500A (zh) * | 2019-04-15 | 2019-08-16 | 平安普惠企业管理有限公司 | 基于多线程的数据同步方法、装置、设备和存储介质 |
CN110737534B (zh) * | 2019-10-29 | 2021-05-25 | 京东数字科技控股有限公司 | 任务的处理方法、装置和服务器 |
CN110737534A (zh) * | 2019-10-29 | 2020-01-31 | 京东数字科技控股有限公司 | 任务的处理方法、装置和服务器 |
CN115033292A (zh) * | 2022-06-16 | 2022-09-09 | 北京火山引擎科技有限公司 | 模型训练方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104793992B (zh) | 2018-05-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104793992A (zh) | 一种基于任务分解的并行任务处理方法 | |
CN106802826B (zh) | 一种基于线程池的业务处理方法及装置 | |
CN104216767B (zh) | 多线程之间访问共享数据的方法及装置 | |
CN102306197B (zh) | 保证跨数据源操作结果一致性的装置和方法 | |
US10044548B2 (en) | Flowlet-based processing | |
CN102541653B (zh) | 一种多任务线程池调度方法和系统 | |
US20150244558A1 (en) | Flowlet-based processing with key/value store checkpointing | |
CN107181789A (zh) | 一种分布式锁实现方法及装置 | |
CN102004663B (zh) | 一种多任务并发调度的系统及方法 | |
CN105260248B (zh) | 一种可动态调整的任务调度系统和调度方法 | |
CN103930875A (zh) | 用于加速业务数据处理的软件虚拟机 | |
CN101727357A (zh) | 用于分配计算中心中资源的方法和装置 | |
CN110377406A (zh) | 一种任务调度方法、装置、存储介质和服务器节点 | |
CN105874426B (zh) | 一种系统调用命令的批处理方法及装置 | |
CN102662725A (zh) | 一种事件驱动的高并发流程虚拟机实现方法 | |
CN102542047A (zh) | 一种任务逻辑库生成方法和系统、数据处理方法和系统 | |
CN110012062A (zh) | 一种多机房任务调度方法、装置及存储介质 | |
CN102541642A (zh) | 一种增强实时性能的任务管理方法 | |
WO2008003536A2 (en) | Method, system and computer program for determining the processing order of a plurality of events | |
CN110471774A (zh) | 一种基于统一任务调度的数据处理方法及装置 | |
US20110023044A1 (en) | Scheduling highly parallel jobs having global interdependencies | |
CN103426045B (zh) | 一种流程虚拟机的流转方法和装置 | |
CN114691340A (zh) | 基于多级反馈队列的异构多机器人任务调度方法及系统 | |
CN103019849B (zh) | 云计算环境下的虚拟机管理方法 | |
CN109756565A (zh) | 一种基于统计表的多任务数据推送方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |