CN107908471B - 一种任务并行处理方法和处理系统 - Google Patents
一种任务并行处理方法和处理系统 Download PDFInfo
- Publication number
- CN107908471B CN107908471B CN201710882689.9A CN201710882689A CN107908471B CN 107908471 B CN107908471 B CN 107908471B CN 201710882689 A CN201710882689 A CN 201710882689A CN 107908471 B CN107908471 B CN 107908471B
- Authority
- CN
- China
- Prior art keywords
- data
- subtask
- task queue
- new
- task
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5017—Task decomposition
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种任务并行处理方法和处理系统,该处理方法包括:循环接收从外部接口发送的数据;当接收所述数据成功时,将所述数据添加到第一任务队列的第一子任务中;所述第一任务队列将所述数据输送至第二任务队列的第二子任务执行数据处理操作,以使所述数据处理后得到数据结果;根据未输送所述数据的所述第一子任务个数和临界值之间的大小关系,为所述第二任务队列创建新的第二子任务,以及所述新的第二子任务对从未输送所述数据的所述第一子任务中接收的所述数据执行所述数据处理操作。该方法用于解决在处理从外部系统串行接收的数据时,由于处理过程中的不同环节消耗的时间不同,容易出现接收数据之后的后续流程被阻塞的问题。
Description
技术领域
本发明涉及数据处理领域,特别涉及一种任务并行处理方法和处理系统。
背景技术
数据(Data)是对事实、概念或指令的一种表达形式,可由人工或自动化装置进行处理。数据经过解释并赋予一定的意义之后,便成为信息。在计算机系统中,数据以二进制信息单元0,1的形式表示。
数据在近年来变得越来越重要,尤其是大数据技术的兴起,让数据越来越成为一种战略资源。而数据处理(data processing)是对数据的采集、存储、检索、加工、变换和传输。数据处理的基本目的是从大量的、可能是杂乱无章的、难以理解的数据中抽取并推导出对于某些特定的人们来说是有价值、有意义的数据。数据处理贯穿于社会生产和社会生活的各个领域。
例如,企业的生产和经营便离不开数据和数据处理,与此同时,随着业务不断扩展,一个系统内部的数据可能难以满足业务高速增长的需求,往往需要从外部获取数据,并经过处理存储到本地数据仓库。
但是外部系统的数据一般都是以访问接口的形式提供,并且出于安全和稳定等因素考虑,对于一次读取的数据量大小有着严格的限制,此外,后续读取操作通常需要依赖前一次的读取结果。因而,从外部获取数据整个处理流程基本上是以串行方式执行的,一个环节处理完进入下一个环节,循环处理。这种方式在数据量较小的情况下,能基本满足需求,然而在数据较大量时,会消耗大量的时间,由此导致的结果是,一方面数据不能快速更新,另一方面长时间的处理浪费系统资源。
而且发明人在实现本发明的过程中发现,由于从外部获取数据的过程需要前后接收的数据之间保持依赖关系,因此需要数据之间在时间维度上不能相互独立,而通过多线程控制数据并行处理的传统并行处理方法,会导致数据之间相互独立,如果保持数据之间在时间维度上被串行接收,由于接收数据后对数据处理的时间往往大于从外部接口接收数据的时间,因而容易出现后续流程被阻塞,系统资源被浪费的情况。
由此可见,如何设计出一种更为适合对从外部系统接收的数据并行处理的方法,以提高数据处理效率,成为了本领域技术人员亟待解决的技术问题。
发明内容
本发明提供一种任务并行处理方法和处理系统,用于解决在处理外部系统数据时容易出现后续流程被阻塞,系统资源被浪费的情况,并且保证了数据的及时更新。
具体的,本发明公开了一种任务并行处理方法,包括:
循环接收从外部接口发送的数据;
当接收所述数据成功时,将所述数据添加到第一任务队列的第一子任务中;
所述第一任务队列将所述数据输送至第二任务队列的第二子任务执行数据处理操作,以使所述数据处理后得到数据结果;
检测所述第二任务队列中第二子任务执行的所述数据处理操作是否完成,若是,则保存所述数据结果;
根据未输送所述数据的所述第一子任务个数和临界值之间的大小关系,为所述第二任务队列创建新的第二子任务,以及所述新的第二子任务对从未输送所述数据的所述第一子任务中接收的所述数据执行所述数据处理操作;
其中,由同一进程控制所述第一任务队列、所述第二任务队列和保存所述数据结果。
优选的,所述循环接收从外部接口发送的数据之间存在依赖关系,且将具有所述依赖关系的所述数据先后添加在不同的所述第一子任务中。
优选的,循环检测所述第一子任务中添加的数据,根据未输送所述数据的所述第一子任务个数和临界值之间的大小关系,为所述第二任务队列创建新的第二子任务中,具体包括:
循环检测所述第一子任务中是否存在所述数据,若是,则对所述第一子任务的个数累计计数;
在所述数据处理操作未完成时,若累计计数后的累计值超过临界值,则创建所述新的第二子任务,其中,所述新的第二子任务个数不大于所述累计值和所述临界值之间的差值;
创建所述新的第二子任务后重新对所述第一子任务的个数累计计数。
优选的,循环检测所述第一子任务中是否存在所述数据,若是,则对所述第一子任务的个数累计计数,具体包括:
监测在所述第一任务队列中添加所述数据的次数和输出所述数据的次数;
根据添加所述数据的次数和输出所述数据的次数之间的差值,确定未输送所述数据的所述第一子任务个数。
优选的,当存在所述第二子任务执行所述数据处理操作完成时,根据所述第二子任务中的前一个所述第二子任务执行所述数据处理操作的消耗时间和后一个所述第二子任务执行所述数据处理操作的消耗时长之间的比值确定所述临界值。
优选的,以预设的容错值修改所述比值,且以修改所述比值后的修改值确定所述临界值。
优选的,所述新的第二子任务对从所述第一子任务中接收的所述数据执行所述数据处理操作中,具体包括:
当所述新的第二子任务启动时,根据所述第一子任务中添加所述数据的先后顺序,将在创建所述新的第二子任务之后添加所述数据输送至所述新的第二子任务;
所述新的第二子任务对从所述第一子任务接收的所述数据执行所述数据处理操作,以在所述数据处理后得到所述数据结果;具体的,基于时间复杂度计算得到后一个所述第二子任务的所述消耗时长。
优选的,检测所述第二任务队列中第二子任务执行的所述数据处理操作是否完成,若是,则保存所述数据结果,具体包括:
所述数据结果保存在第三任务队列的第三子任务中;
循环检测所述第三任务队列的第三子任务中是否保存有所述数据结果,若是,则当保存有所述数据结果的所述第三子任务满足预设条件时,则创建新的第三子任务;
当所述新的第二子任务将所述数据结果输送至所述第三任务队列时,将所述数据结果保存在所述新的第三子任务中。
相应的,本发明还公开了一种任务并行处理系统,包括:
数据获取模块,用于循环从外部接口中接收数据,并在接收数据成功后,将接收的所述数据添加到第一任务队列的第一子任务中;
数据处理模块,包括第一任务队列和第二任务队列,用于控制所述第一任务队列的第一子任务将所述数据输送至所述第二任务队列的第二子任务执行数据处理操作,以使所述数据处理后得到数据结果,并在检测到所述第二任务队列中第二子任务执行的所述数据处理操作完成后,保存所述数据结果到第三任务队列;以及循环检测所述第一子任务中添加的数据,当所述数据处理操作未完成时,根据添加有所述数据的所述第一子任务个数和临界值之间的大小关系,为所述第二任务队列创建新的第二子任务;
数据保存模块,包括第三任务队列,用于接收所述数据结果并将所述数据结果保存到第三子任务中;所述数据保存模块在检测到保存有所述数据结果的所述第三子任务满足预设条件时,创建新的第三子任务以保存所述新的第二子任务输送来的所述数据结果;
统一化进程,用于控制所述第一任务队列、第二任务队列和第三任务队列。
优选的,包括:
处理临界值单元,设置在所述第一任务队列中,用于判断所述第一子任务个数和临界值的大小关系;
保存临界值单元,设置在所述第三任务队列中,用于判断所述第三子任务是否满足预设条件。
由于外部获取数据的过程是串行的,若是直接使用现有技术,容易出现后续流程被阻塞,系统资源被浪费的情况;通过应用本发明的任务并行处理方法,通过循环从外部接口中接收其发送的数据,在接收数据成功后,即将接收的数据添加到第一任务队列的第一子任务中,可以进行下一次的数据获取过程,第二任务队列中的第二子任务从第一子任务中获取被串行接收的数据,并对该数据执行数据处理操作,其中,由同一进程控制第一任务队列、第二任务队列和保存数据结果,如此从时间维度上保证具有依赖关系的数据被串行接收、处理,进一步,若第二子任务执行数据处理操作完成后得到数据结果,则保存该数据结果,并且循环检测第二子任务中是否存在前述数据,当第二子任务执行数据处理操作未完成时,根据存在前述数据的第二子任务个数和临界值的大小关系,为第二任务队列创建新的子任务,以及该新创建的子任务也执行前述数据处理操作。如此,保证具有依赖关系的数据之间的处理过程是相互独立,以避免由于处理数据的时间比接收数据的时间长,导致数据处理过程中的阻塞问题,从而提高任务并行处理中的处理效率。
附图说明
图1是一种外部数据处理流程示意图;
图2是本发明一种任务并行处理方法的流程图;
图3是本发明一种理想状态下的任务并行处理方法流程图;
图4是本发明一种非理想状态下的数据处理流程图;
图5是一种外部数据获取的处理流程图;
图6是本发明一种优选的任务并行处理方法流程图;
图7是本发明一种优选的任务并行处理方法示意图;
图8是本发明一种任务并行处理系统的示意图。
具体实施方式
为了进一步阐述本发明的技术思想,现结合具体的应用场景,对本发明的技术方案进行说明。
大数据时代,数据是一种战略资源。其中,从外部系统获取的数据一般都是以访问接口的形式提供的,这是出于安全和稳定等因素考虑,对于一次读取的数据量大小有着严格的限制,此外,后续读取操作通常都需要依赖前一次的读取结果。
图1是一种外部数据处理流程示意图,参考图1可知,一般的处理流程如下:
一般的处理流程如下:
Step 1.从外部接口接收数据;
Step 2.按照一定的规则处理数据;
Step 3.将处理完的数据存储到数据库或者文件;
Step 4.如果还有数据,重复以上步骤;
通过以上流程,可以看出,从外部获取数据整个处理流程基本上是以串行方式执行的,一个环节处理完进然后入下一个环节,循环处理。这种方式在数据量较小的情况下,能基本满足需求,然而在数据较大量时,会消耗大量的时间,由此导致的结果是,一方面数据不能快速更新,另一方面长时间的处理浪费系统资源。
鉴于此,本文提出了一种外部数据获取的并行处理方法,在一定程度提升了数据的处理速度,使数据得到快速更新,同时极大的提高了计算资源的利用率。
实施例一:
图2是本发明一种任务并行处理方法的流程图,参考图2可知:
本发明公开了一种任务并行处理方法,包括:
S1:循环接收从外部接口发送的数据;
S2:当接收所述数据成功时,将所述数据添加到第一任务队列的第一子任务中;
S3:所述第一任务队列将所述数据输送至第二任务队列的第二子任务执行数据处理操作,以使所述数据处理后得到数据结果;
S4:检测所述第二任务队列中第二子任务执行的所述数据处理操作是否完成,若是,则保存所述数据结果;
S5: 根据未输送所述数据的所述第一子任务个数和临界值之间的大小关系,为所述第二任务队列创建新的第二子任务,以及所述新的第二子任务对从未输送所述数据的所述第一子任务中接收的所述数据执行所述数据处理操作;
其中,由同一进程控制所述第一任务队列、所述第二任务队列和保存所述数据结果。
本发明中,该第一任务队列即数据处理缓存队列,该第二任务队列即执行数据处理操作队列。
由于外部获取数据的过程是串行的,若是直接使用现有技术,容易出现后续流程被阻塞,系统资源被浪费的情况;通过应用本发明的任务并行处理方法,通过循环从外部接口中接收其发送的数据,在接收数据成功后,即将接收的数据添加到第一任务队列的第一子任务中,可以进行下一次的数据获取过程,第二任务队列中的第二子任务从第一子任务中获取被串行接收的数据,并对该数据执行数据处理操作,其中,由同一进程控制第一任务队列、第二任务队列和保存数据结果,如此从时间维度上保证具有依赖关系的数据被串行接收、处理,进一步,若第二子任务执行数据处理操作完成后得到数据结果,则保存该数据结果,并且循环检测第二子任务中是否存在前述数据,当第二子任务执行数据处理操作未完成时,根据存在前述数据的第二子任务个数和临界值的大小关系,为第二任务队列创建新的子任务,以及该新创建的子任务也执行前述数据处理操作。如此,保证具有依赖关系的数据之间的处理过程是相互独立,以避免由于处理数据的时间比接收数据的时间长,导致数据处理过程中的阻塞问题,从而提高任务并行处理中的处理效率。
首先来看一下任务并行的定义:一个任务完成可分为几个不同的子任务,对于一个任务而言,这几个子任务一定是串行执行的,但是对于多个任务而言,可以实现在同一时间执行多个任务的不同子任务,以达到时间上的并行。
图3是本发明一种理想状态下的任务并行处理方法流程图,本图所示的方案是基于图2流程,在理想状态下得到的方案,其中,将任务的执行过程分为三个部分,分别是1过程获取数据、2过程处理数据和3过程存储数据,竖轴表示系统空间,横轴表示系统时间。
从图中可以看出,在t1时间,只有一个任务在执行,在t2时间有两个任务在同时执行,在t3时间,三个任务在同时执行 ,任务像流水一样,不断的进入处理系统,从t3时间开始一直到t(n-3)的时间段内,一直是三个任务同时在执行。
假设时间单位是T,执行完一个完整任务的时间是s,那么s=3T。执行n个任务消耗的总时间是tn=(n+2)T=(n+2)s/3。如果使用完全串行的方式,执行n个任务,消耗的总时间是tn=3nT=ns,可见使用并行流水线技术处理外部数据效率提升十分明显。
优选的,所述步骤S1:所述循环接收从外部接口发送的数据之间存在依赖关系,且将具有所述依赖关系的所述数据先后添加在不同的所述第一子任务中。本实施方案中,为了保证获取的数据的安全性,因而,从外部接口获取数据的过程是串行的,后续获取数据的时候均需要依赖前一次的返回结果,若是不能妥善处理,可能出现后续流程无法执行的问题,本方案,通过每次从外部接口获取数据且根据不同的依赖关系将数据添加到不同的第一子任务中,以待输送至第二任务队列(即执行数据处理操作队列)完成数据处理操作,如此设置,不仅可以保证信息的安全性,而且,每次获取的数据分属不同的任务,方便后续的数据处理。
具体的,该依赖关系可以指的是在请求外部接口的时候,每一次请求都会返回一个分页参数,下一次请求必须带着该分页参数才能够请求成功(首次请求该参数为空),由于该分页参数的限制,导致后一次请求必须依赖前一次请求的返回结果,因而两次请求之间就存在依赖关系,在后续的处理流程中,由于该分页参数的存在,因而不担心不同任务的数据会发生混杂的问题,减少了任务处理出错的可能性。
优选的,在步骤S5中:根据未输送所述数据的所述第一子任务个数和临界值之间的大小关系,为所述第二任务队列创建新的第二子任务中,具体包括:
循环检测所述第一子任务中是否存在所述数据,若是,则对所述第一子任务的个数累计计数;
在所述数据处理操作未完成时,若累计计数后的累计值超过临界值,则创建所述新的第二子任务,其中,所述新的第二子任务个数不大于所述累计值和所述临界值之间的差值;
创建所述新的第二子任务后重新对所述第一子任务的个数累计计数。本实施方案中,该第一任务队列中的第一子任务是否能够被及时的输送到第二任务队列中关系到数据处理的及时性,若是队列中的任务和数据不能够被及时的处理,那么将造成数据处理效率低下的问题,而通过应用本方案,循环的检测第一子任务中是否存在数据,并且对第一子任务的个数累计计数,当累计计数超过临界值时,创建新的第二子任务以接收第一子任务中的数据以执行数据处理操作,可以保证数据能够被及时的处理,提高了数据处理的及时性和处理效率;而为了避免各个子任务被后续流程阻塞,因而,本方案通过第二任务队列中的不同的第二子任务用于相互独立的进行数据处理操作,使得数据处理操作的过程不会被阻塞而影响数据处理效率。
优选的,循环检测所述第一子任务中是否存在所述数据,若是,则对所述第一子任务的个数累计计数,具体包括:
监测在所述第一任务队列中添加所述数据的次数和输出所述数据的次数;
根据添加所述数据的次数和输出所述数据的次数之间的差值,确定未输送所述数据的所述第一子任务个数。本实施方案中,该第一任务队列只需要监控添加数据的次数和输出数据的次数即可确定未输送数据的该第一子任务的个数, 从而用于判断该第一子任务的个数,以判断何时创建新的第二子任务,避免该第一子任务过度堆积从造成数据处理效率低下的问题。
具体的,当未输送所述数据的所述第一子任务个数超过所述临界值时,创建新的第二子任务,所述新的第二子任务个数大于所述第一子任务个数与所述临界值的差值。该临界值计算的是未输送该数据到第二子任务的第一子任务的个数。
优选的,当存在所述第二子任务执行所述数据处理操作完成时,根据所述第二子任务中的前一个所述第二子任务执行所述数据处理操作的消耗时间和后一个所述第二子任务执行所述数据处理操作的消耗时长之间的比值确定所述临界值。本实施方案中,该临界值是用于判断是否应该创建新的第二子任务的依据,该临界值是相对动态的,具体的,是根据第二子任务中前一个子任务和后一个子任务执行数据处理操作的消耗时间比值确定的,如此,可以保证第一子任务中的任务和数据超过临界值能够被创建的第二子任务不相干扰的,不被阻塞的迅速完成,提高了数据处理的效率,同时避免了资源的浪费。
一般来说,以预设的容错值修改所述比值,且以修改所述比值后的修改值确定所述临界值。本实施方案中,该比值是理想状态下的比值,在实际应用时,由于需要考虑考虑到系统调度延迟等因素,该临界值不能按理想状态下设置,而是应该稍微增大,以增加其容错能力。优选的,所述容错值等于1。在消耗时间比例不是很大的情况下,该容错值可以设置为1,当然,如果消耗时间比例过大或者过小,则应该对应调整该容错值。
优选的,所述新的第二子任务对从所述第一子任务中接收的所述数据执行所述数据处理操作中,具体包括:
当所述新的第二子任务启动时,根据所述第一子任务中添加所述数据的先后顺序,将在创建所述新的第二子任务之后添加所述数据输送至所述新的第二子任务;
所述新的第二子任务对从所述第一子任务接收的所述数据执行所述数据处理操作,以在所述数据处理后得到所述数据结果。本实施方案中,新的第二子任务以数据处理器,从第一子任务中按照添加数据的先后顺序,接收数据并执行数据处理操作,可以保证第二任务队列中的任务和数据能够被及时的处理,保证数据处理的效率。
具体的,基于时间复杂度计算得到后一个所述第二子任务的所述消耗时长。本实施方案中,该临界值亦可以称之为任务最大值,通过判定队列内的任务数量是否超过临界值,并对应创建新的第二子任务,将能够减少系统资源被闲置浪费的情况发生;其中,该后一个第二子任务处理一个任务消耗的时间基于时间复杂度预估计算得到的;具体的,例如,前一个任务是数据处理,后一个任务是数据存储;数据处理任务需要处理一条数据中10个字段的值,假设分10个步骤,每个步骤耗时1个时间单位,那么数据对比任务总耗时10个时间单位,即他的时间复杂度是O(10);而数据存储任务假设分3个步骤,即根据条件查询数据库,然后判断是否有记录,如果有记录则更新,没有则插入,每个步骤耗时1个时间单位,那么总耗时3个时间单位,时间复杂度是O(3);当然,如上所述是简单例子,实际情况可能要比这么复杂很多,需要根据具体的场景进行处理,在此不予赘述。
优选的,在步骤S4中:检测所述第二任务队列中第二子任务执行的所述数据处理操作是否完成,若是,则保存所述数据结果,具体包括:
所述数据结果保存在第三任务队列的第三子任务中;
循环检测所述第三任务队列的第三子任务中是否保存有所述数据结果,若是,则当保存有所述数据结果的所述第三子任务满足预设条件时,则创建新的第三子任务;
当所述新的第二子任务将所述数据结果输送至所述第三任务队列时,将所述数据结果保存在所述新的第三子任务中。本实施方案中,第三任务队列,即数据保存缓存任务队列关系到数据存储和更新的及时性,执行妥当与否关系到数据存储的处理效率和数据更新的及时性,而通过应用本方案,及时的检测并创建新的第三子任务,可以避免各个任务被其他任务所阻塞,使得其与其他任务是相互独立的,不会干涉在前在后的任务流程,提高了任务的整体处理效率;另外,该预设条件可以是后一个第三子任务保存一个任务消耗的时间与前一个第三子任务保存一个任务消耗时间之比加上第二容错值;优选的,该第二容错值也可以等于1。
图4是本发明一种非理想状态下的数据处理流程图,图5是一种外部数据获取的处理流程图,参考图4和图5,结合图3可知,同理,将任务的执行过程分为三个部分,分别是1过程获取数据、2过程处理数据和3过程存储数据,竖轴表示系统空间,横轴表示系统时间。
图3所示是在理想状态下,但在实际中三个阶段的消耗时间可能并不一致,往往处理数据消耗的时间较长,假设处理数据耗时两个时间单位,由于不同阶段之间耗时不同,导致耗时长的阶段在处理当前任务的子任务时,不能处理下一任务的相同阶段,也就是不同任务的相同子任务出现不同步,从而造成任务延时,那么图3所示情况将变成如图4所示情况,图4中,获取数据和处理数据之间的空白部分即表示被浪费的空间和时间;而从图5中可以看出,只有获取数据的时候需要依赖前一次的返回结果,此处必须是串行,而处理数据、保存数据各个子任务是完全独立的,相对于数据处理和数据保存而言,数据获取耗时较短。
图6是本发明一种优选的任务并行处理方法流程图,图7是本发明一种优选的任务并行处理方法示意图,基于图2的流程图,结合图4和图5可知,图6和图7所示的方案是基于图2方案上的优选实施方案,如图6和图7所示,将获取外部数据的流程分为三个环节,即数据获取、数据处理和数据保存。并将三个步骤分开,同时为数据处理、数据保存增加任务缓存队列,避免了前一个环节执行完,需要等待下一个环节任务执行器执行完正在执行的任务而产生阻塞。
数据获取部分串行执行,每次获取成功后,将数据打包放到数据处理的任务队列中(数据流入下一个环节),然后继续进行下一次取数据,循环进行,不必关心后续的处理流程(不会被后续流程阻塞)。
数据处理部分有多个执行器从任务队列中取数据处理,多个执行器之间并行执行,处理器的数量可根据队列中任务的数量动态增加,如果任务数量在一段时间内大于预设的临界值,则创建一个新的执行器,并启动执行, 保证队列中的任务会被立即执行。数据处理完成之后,将结果打包放到数据保存任务队列中。
创建数据执行器和保存执行器的临界值可根据获取数据消耗时间和处理数据消耗时间比率确定。例如获取数据流程消耗时间1个时间单位,处理数据流程耗时2个时间单位,理想状态下,此处的临界值可设置为2即可。但是考虑到系统调度延迟等因素,可将该值稍微增大到3,以增加容错能力。
与数据处理环节类似,数据保存环节执行器从任务队列中取数据进行保存,执行器的数据也可动态增加。
如此一来,图3所示情况可变成图7所示,从图7可以看出,处理数据环节有多个执行器,可保证处理数据子任务一旦到达会立即被处理,不用再等待上一个子任务2执行完,避免了由于处理数据子任务处理时间长而导致流程阻塞,延长处理时间。采用本方案处理n个任务消耗的时间tn=(n+3)T=(n+3)s/4。
忽略处理一个完整任务消耗时间(即此处的s)不一致的影响,可以看出,本方案消耗时间大概只有串行处理的1/4,是普通时间并行技术消耗时间的1/2。
实施例二:
相应的,本发明还公开了一种任务并行处理系统,图8是本发明一种任务并行处理系统的示意图,参考图8,结合图2-图7可知,该任务并行处理系统100包括:
数据获取模块10,用于循环从外部接口中接收数据,并在接收数据成功后,将接收的所述数据添加到第一任务队列的第一子任务中;
数据处理模块20,包括第一任务队列和第二任务队列,用于控制所述第一任务队列的第一子任务将所述数据输送至所述第二任务队列的第二子任务执行数据处理操作,以使所述数据处理后得到数据结果,并在检测到所述第二任务队列中第二子任务执行的所述数据处理操作完成后,保存所述数据结果到第三任务队列;以及循环检测所述第一子任务中添加的数据,当所述数据处理操作未完成时,根据添加有所述数据的所述第一子任务个数和临界值之间的大小关系,为所述第二任务队列创建新的第二子任务;
数据保存模块30,包括第三任务队列,用于接收所述数据结果并将所述数据结果保存到第三子任务中;所述数据保存模块在检测到保存有所述数据结果的所述第三子任务满足预设条件时,创建新的第三子任务以保存所述新的第二子任务输送来的所述数据结果;
统一化进程40,用于控制所述第一任务队列、第二任务队列和第三任务队列。
优选的,包括:
处理临界值单元(图中未标示),设置在所述第一任务队列中,用于判断所述第一子任务个数和临界值的大小关系;
保存临界值单元(图中未标示),设置在所述第三任务队列中,用于判断所述第三子任务是否满足预设条件。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施场景所述的方法。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施场景的优劣。
以上公开的仅为本发明的几个具体实施场景,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。
Claims (8)
1.一种任务并行处理方法,其特征在于,包括:
循环接收从外部接口发送的数据;
当接收所述数据成功时,将所述数据添加到第一任务队列的第一子任务中,其中,循环接收的数据之间存在依赖关系,且具有所述依赖关系的所述数据被先后添加在不同的所述第一子任务中;
所述第一任务队列将所述数据输送至第二任务队列的第二子任务执行数据处理操作,以使所述数据处理操作后得到数据结果;
检测所述第二任务队列中第二子任务执行的所述数据处理操作是否完成,若是,则保存所述数据结果;
检测所述第一子任务中是否存在所述数据,在未输送所述数据的所述第一子任务个数大于临界值时,为所述第二任务队列创建新的第二子任务,以及所述新的第二子任务对从未输送所述数据的所述第一子任务中接收的所述数据执行所述数据处理操作,所述临界值是根据所述第二子任务中的前一个所述第二子任务执行所述数据处理操作的消耗时间和后一个所述第二子任务执行所述数据处理操作的消耗时长之间的比值确定的;
其中,由同一进程控制所述第一任务队列、所述第二任务队列和保存所述数据结果。
2.如权利要求1所述的一种任务并行处理方法,其特征在于,检测所述第一子任务中是否存在所述数据,在未输送所述数据的所述第一子任务个数大于临界值时,为所述第二任务队列创建新的第二子任务中,具体包括:
循环检测所述第一子任务中是否存在所述数据,若是,则对所述第一子任务的个数累计计数;
在所述数据处理操作未完成时,若累计计数后的累计值超过所述临界值,则创建所述新的第二子任务,其中,所述新的第二子任务个数不大于所述累计值和所述临界值之间的差值;
创建所述新的第二子任务后重新对所述第一子任务的个数累计计数。
3.如权利要求2所述的一种任务并行处理方法,其特征在于,循环检测所述第一子任务中是否存在所述数据,若是,则对所述第一子任务的个数累计计数,具体包括:
监测在所述第一任务队列中添加所述数据的次数和输出所述数据的次数;
根据添加所述数据的次数和输出所述数据的次数之间的差值,确定未输送所述数据的所述第一子任务个数。
4.如权利要求3所述的一种任务并行处理方法,其特征在于,以预设的容错值修改所述比值,且以修改所述比值后的修改值确定所述临界值。
5.如权利要求1-2任一所述的一种任务并行处理方法,其特征在于,所述新的第二子任务对从未输送所述数据的所述第一子任务中接收的所述数据执行所述数据处理操作中,具体包括:
当所述新的第二子任务启动时,根据未输送所述数据的所述第一子任务中添加所述数据的先后顺序,将在创建所述新的第二子任务之后添加的所述数据输送至所述新的第二子任务;
所述新的第二子任务对从未输送所述数据的所述第一子任务接收的所述数据执行所述数据处理操作,以在所述数据处理后得到所述数据结果。
6.如权利要求1-2任一所述的一种任务并行处理方法,其特征在于,检测所述第二任务队列中第二子任务执行的所述数据处理操作是否完成,若是,则保存所述数据结果,具体包括:
所述数据结果保存在第三任务队列的第三子任务中;
循环检测所述第三任务队列的第三子任务中是否保存有所述数据结果,若是,则当保存有所述数据结果的所述第三子任务满足预设条件时,则创建新的第三子任务;
当所述新的第二子任务将所述数据结果输送至所述第三任务队列时,将所述数据结果保存在所述新的第三子任务中。
7.一种任务并行处理系统,其特征在于,包括:
数据获取模块,用于循环从外部接口中接收数据,并在接收数据成功后,将接收的所述数据添加到第一任务队列的第一子任务中,其中,循环接收的数据之间存在依赖关系,且具有所述依赖关系的所述数据被先后添加在不同的所述第一子任务中;
数据处理模块,包括第一任务队列和第二任务队列,用于控制所述第一任务队列的第一子任务将所述数据输送至所述第二任务队列的第二子任务执行数据处理操作,以使所述数据处理操作后得到数据结果,并在检测到所述第二任务队列中第二子任务执行的所述数据处理操作完成后,保存所述数据结果到第三任务队列;以及循环检测所述第一子任务中添加的数据,当所述数据处理操作未完成时,在添加有所述数据的所述第一子任务个数大于临界值时,为所述第二任务队列创建新的第二子任务,以及所述新的第二子任务对从未输送所述数据的所述第一子任务中接收的所述数据执行所述数据处理操作,其中,所述临界值是根据所述第二子任务中的前一个所述第二子任务执行所述数据处理操作的消耗时间和后一个所述第二子任务执行所述数据处理操作的消耗时长之间的比值确定的;
数据保存模块,包括第三任务队列,用于接收所述数据结果并将所述数据结果保存到第三子任务中;所述数据保存模块在检测到保存有所述数据结果的所述第三子任务满足预设条件时,创建新的第三子任务以保存所述新的第二子任务输送来的所述数据结果;
统一化进程,用于控制所述第一任务队列、第二任务队列和第三任务队列。
8.如权利要求7所述的任务并行处理系统,其特征在于,包括:
处理临界值单元,设置在所述第一任务队列中,用于判断所述第一子任务个数和临界值的大小关系;
保存临界值单元,设置在所述第三任务队列中,用于判断所述第三子任务是否满足预设条件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710882689.9A CN107908471B (zh) | 2017-09-26 | 2017-09-26 | 一种任务并行处理方法和处理系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710882689.9A CN107908471B (zh) | 2017-09-26 | 2017-09-26 | 一种任务并行处理方法和处理系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107908471A CN107908471A (zh) | 2018-04-13 |
CN107908471B true CN107908471B (zh) | 2021-06-08 |
Family
ID=61840255
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710882689.9A Active CN107908471B (zh) | 2017-09-26 | 2017-09-26 | 一种任务并行处理方法和处理系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107908471B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108549583B (zh) * | 2018-04-17 | 2021-05-07 | 致云科技有限公司 | 大数据处理方法、装置、服务器及可读存储介质 |
CN110597890B (zh) * | 2018-05-25 | 2022-04-05 | 杭州海康威视数字技术股份有限公司 | 数据采集系统、方法、节点设备及存储介质 |
CN110188067B (zh) * | 2019-07-15 | 2023-04-25 | 北京一流科技有限公司 | 协处理器及其数据处理加速方法 |
CN110209629B (zh) * | 2019-07-15 | 2023-12-15 | 北京一流科技有限公司 | 协处理器的数据处理路径中的数据流动加速装置及其方法 |
CN112307046A (zh) * | 2020-11-26 | 2021-02-02 | 北京金堤征信服务有限公司 | 数据采集方法和装置、计算机可读存储介质、电子设备 |
CN113268325A (zh) * | 2021-05-21 | 2021-08-17 | 北京达佳互联信息技术有限公司 | 一种调度任务的方法、装置及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102902512A (zh) * | 2012-08-31 | 2013-01-30 | 浪潮电子信息产业股份有限公司 | 一种基于多线程编程及消息队列的多线程并行处理方法 |
CN103218254A (zh) * | 2013-04-15 | 2013-07-24 | 广州新科佳都科技有限公司 | 一种多队列的自动售检票数据处理方法 |
CN105824691A (zh) * | 2015-01-08 | 2016-08-03 | 平安科技(深圳)有限公司 | 动态调节线程的方法及装置 |
CN106055311A (zh) * | 2016-05-26 | 2016-10-26 | 浙江工业大学 | 基于流水线多线程的MapReduce任务并行化方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8312230B2 (en) * | 2008-06-06 | 2012-11-13 | International Business Machines Corporation | Dynamic control of partition memory affinity in a shared memory partition data processing system |
-
2017
- 2017-09-26 CN CN201710882689.9A patent/CN107908471B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102902512A (zh) * | 2012-08-31 | 2013-01-30 | 浪潮电子信息产业股份有限公司 | 一种基于多线程编程及消息队列的多线程并行处理方法 |
CN103218254A (zh) * | 2013-04-15 | 2013-07-24 | 广州新科佳都科技有限公司 | 一种多队列的自动售检票数据处理方法 |
CN105824691A (zh) * | 2015-01-08 | 2016-08-03 | 平安科技(深圳)有限公司 | 动态调节线程的方法及装置 |
CN106055311A (zh) * | 2016-05-26 | 2016-10-26 | 浙江工业大学 | 基于流水线多线程的MapReduce任务并行化方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107908471A (zh) | 2018-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107908471B (zh) | 一种任务并行处理方法和处理系统 | |
US10585889B2 (en) | Optimizing skewed joins in big data | |
US10474504B2 (en) | Distributed node intra-group task scheduling method and system | |
US10733019B2 (en) | Apparatus and method for data processing | |
US8595732B2 (en) | Reducing the response time of flexible highly data parallel task by assigning task sets using dynamic combined longest processing time scheme | |
US9870269B1 (en) | Job allocation in a clustered environment | |
US20150295970A1 (en) | Method and device for augmenting and releasing capacity of computing resources in real-time stream computing system | |
US8516492B2 (en) | Soft partitions and load balancing | |
US20170300359A1 (en) | Policy based workload scaler | |
CN101366012A (zh) | 用于多处理器系统中的中断分配的方法和系统 | |
CN103927225A (zh) | 一种多核心架构的互联网信息处理优化方法 | |
US9600335B2 (en) | Method and system for efficient execution of ordered and unordered tasks in multi-threaded and networked computing | |
CN110308982B (zh) | 一种共享内存复用方法及装置 | |
CN104572307A (zh) | 一种对虚拟资源进行弹性调度的方法 | |
CN107818012B (zh) | 一种数据处理方法、装置及电子设备 | |
CN109257399B (zh) | 云平台应用程序管理方法及管理平台、存储介质 | |
CN103412786A (zh) | 一种高性能服务器架构系统及数据处理方法 | |
CN111459641B (zh) | 一种跨机房的任务调度和任务处理的方法及装置 | |
CN113138860B (zh) | 消息队列的管理方法及装置 | |
CN106095940A (zh) | 一种基于任务负载的数据迁移方法 | |
CN110928655A (zh) | 一种任务处理方法及装置 | |
CN114217966A (zh) | 基于资源调整的深度学习模型动态批处理调度方法和系统 | |
US20150026694A1 (en) | Method of processing information, storage medium, and information processing apparatus | |
Althebyan et al. | A scalable Map Reduce tasks scheduling: a threading-based approach | |
CN108021448B (zh) | 一种内核空间的优化方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |