CN104793992A - 一种基于任务分解的并行任务处理方法 - Google Patents

一种基于任务分解的并行任务处理方法 Download PDF

Info

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
Application number
CN201510188327.0A
Other languages
English (en)
Other versions
CN104793992B (zh
Inventor
王友钊
黄静
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN201510188327.0A priority Critical patent/CN104793992B/zh
Publication of CN104793992A publication Critical patent/CN104793992A/zh
Application granted granted Critical
Publication of CN104793992B publication Critical patent/CN104793992B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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,则根据任务编码和子任务响应构建整体任务响应,完成任务的并发处理。
CN201510188327.0A 2015-04-21 2015-04-21 一种基于任务分解的并行任务处理方法 Active CN104793992B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (5)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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