CN111752971A - 基于任务并行处理数据流的方法、装置、设备及存储介质 - Google Patents
基于任务并行处理数据流的方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111752971A CN111752971A CN202010584436.5A CN202010584436A CN111752971A CN 111752971 A CN111752971 A CN 111752971A CN 202010584436 A CN202010584436 A CN 202010584436A CN 111752971 A CN111752971 A CN 111752971A
- Authority
- CN
- China
- Prior art keywords
- data
- task
- processed
- thread
- task queue
- 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
- 238000012545 processing Methods 0.000 title claims abstract description 108
- 238000000034 method Methods 0.000 title claims abstract description 71
- 230000008569 process Effects 0.000 claims abstract description 36
- 238000004806 packaging method and process Methods 0.000 claims abstract description 14
- 238000004364 calculation method Methods 0.000 claims description 27
- 230000007246 mechanism Effects 0.000 abstract description 5
- 238000012856 packing Methods 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 19
- 230000003993 interaction Effects 0.000 description 12
- 238000012544 monitoring process Methods 0.000 description 8
- 239000000872 buffer Substances 0.000 description 7
- 238000004590 computer program Methods 0.000 description 4
- 230000002085 persistent effect Effects 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000013479 data entry Methods 0.000 description 2
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 239000002355 dual-layer Substances 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000005111 flow chemistry technique Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000011144 upstream manufacturing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24568—Data stream processing; Continuous queries
-
- 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
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5018—Thread allocation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种数据流并行处理的方法、装置、设备及存储介质。通过确定的多个工作线程之中的每一个工作线程,分别从任务队列中取出待处理任务,以针对取出的待处理任务进行处理,其中,待处理任务由数据流之中的待操作分批数据与数据流处理之中的相应操作步骤打包而成。本发明公开的这种基于任务生成式的并行化运行机制,对于基于不同操作步骤打包生成的任务,在实际运行过程中会根据其耗时自动地调整并行度。
Description
本申请是申请日为2017年12月20日、申请号为201711381582.2、题为“基于任务并行处理数据流的方法、装置、设备及存储介质”的专利申请的分案申请。
技术领域
本发明涉及数据科学领域,特别是涉及一种基于任务对数据流并行处理的方法、装置、设备及存储介质。
背景技术
在数据处理业务涉及的数据量很大的情况下,通常需要利用多线程并行执行来使业务的总体执行时间减小。线程是操作系统进行运算调度的单位,计算必须以线程的方式交给操作系统执行,在实际计算时,线程会被分配给某个物理核来进行计算。尽量多的使用机器的物理资源可以降低任务的总时间开销。
一种利用多线程的思路是将需要处理的数据分成多批,每个线程负责处理一批数据。这种多线程执行方案的问题是,数据的处理一般包括读写和计算,数据的读写是硬盘操作,而计算是诸如CPU操作的处理,一个线程如果在多种硬件设备上切换操作,会带来很大的额外开销。另外在当前线程等待数据读入时,其对应的CPU并没有执行操作,相当于浪费了同一时间的CPU资源。
现有技术主要靠异步IO解决这个问题。假设数据处理过程包括数据读取、数据计算、计算结果存储三个步骤,则可以设置三个线程,线程一只负责从硬盘读取数据,并将数据放入缓冲区一,线程二只负责从缓冲区一读取数据,对其进行计算并将计算结果写入缓冲区二,线程三只负责将缓冲区二的数据写入新文件(这里一个线程在完成对全部数据的操作之前不会停止)。一般来说,为了防止内存中的数据过大,缓冲区都设有可缓存的上限数量。
假设数据的读写对于单位数据所消耗的时间为一个时间单位,计算操作所消耗的时间较多,为三个时间单位,则可以通过增加计算操作的线程数来抵消上述运算速度的差异。如可以设置五个线程,两个分别负责读写,三个负责计算,则缓冲区内的数据不会不断累加,计算资源在整个任务过程中都处于被使用的状态。
然而异步IO的问题是,当数据的处理变得复杂时,如假设数据的处理过程包括多个操作步骤,且每个操作步骤的时间资源消耗都不相同,这种情况下就很难将线程比例配置到最合理。而且在异步IO的整个计算过程中,开启的线程数是所有操作步骤所需线程数之和。由于计算机上的物理CPU个数是固定的,过多的线程会增加系统调度时的切换开销。而相加的关系导致总线程数与数据的具体处理流程有关,通用计算框架不得不考虑各种数据处理业务的具体特性来对线程数进行控制。
发明内容
本发明的一个目的在于提供一种基于任务生成式的并行化处理方案,其能够根据数据处理流程的复杂度自适应调整并行度。
根据本发明的一个方面,提供了一种基于任务对数据流并行处理的方法,包括:确定多个工作线程;通过多个工作线程之中的每一个工作线程,分别从任务队列中取出待处理任务,以针对取出的待处理任务进行处理,其中,待处理任务由数据流之中的待操作分批数据与数据流处理之中的相应操作步骤打包而成。
可选地,该方法还可以包括:每一个工作线程将处理后得到的操作结果数据作为新的待操作分批数据与相应操作步骤的后续操作步骤打包成新的待处理任务,以放入任务队列。
可选地,每一个工作线程将处理后得到的操作结果数据作为新的待操作分批数据与其分支条件被满足的分支的后续操作步骤打包成新的待处理任务,以放入任务队列。
可选地,该方法还可以包括:确定单独的源线程;通过源线程来专门循环地将数据流之中的待操作分批数据与数据流处理之中的起始操作步骤打包成待处理任务,以放入任务队列。
可选地,该方法还可以包括:监控对数据流并行处理过程中的内存使用情况;在当前使用的内存超过预定阈值的情况下,源线程暂停向任务队列中放入新的待处理任务。
可选地,工作线程在与任务队列交互过程中,对任务队列进行加锁;并且,在工作线程与任务队列交互完毕后,释放任务队列的锁。
可选地,任务队列分为计算任务队列和IO任务队列,并且,工作线程分为计算工作线程和IO工作线程,计算工作线程仅从计算任务队列中取出待处理任务,IO工作线程仅从IO任务队列中取出待处理任务,工作线程根据后续操作步骤是计算操作步骤还是IO操作步骤,将新的待处理任务放入计算任务队列或IO任务队列。
可选地,在数据流处理之中的起始操作步骤为数据输入步骤的情况下,起始操作的后续操作步骤包括用于对读取的待操作分批数据进行接续处理的操作步骤和数据输入步骤本身,其中,数据输入步骤单独构成用于读取待操作分批数据的待处理任务。
可选地,可以根据对数据流并行处理的机器的物理参数,确定多个工作线程。
可选地,数据流处理能够用计算图表征,计算图是由至少两个操作步骤和至少一个数据边构成的有向图,操作步骤表示对数据执行的某种操作,数据边表示数据的流向。
根据本发明的另一个方面,还提供了一种基于任务对数据流并行处理的装置,包括:工作线程确定模块,用于确定多个工作线程;任务处理模块,用于通过多个工作线程之中的每一个工作线程,分别从任务队列中取出待处理任务,以针对取出的待处理任务进行处理,其中,待处理任务由数据流之中的待操作分批数据与数据流处理之中的相应操作步骤打包而成。
可选地,每一个工作线程将处理后得到的操作结果数据作为新的待操作分批数据与相应操作步骤的后续操作步骤打包成新的待处理任务,以放入任务队列。
可选地,每一个工作线程将处理后得到的操作结果数据作为新的待操作分批数据与其分支条件被满足的分支的后续操作步骤打包成新的待处理任务,以放入任务队列。
可选地,该装置还可以包括:源线程确定模块,用于确定单独的源线程,任务处理模块还通过源线程来专门循环地将数据流之中的待操作分批数据与数据流处理之中的起始操作步骤打包成待处理任务,以放入任务队列。
可选地,该装置还可以包括:内存监管模块,用于监控对数据流并行处理过程中的内存使用情况,在当前使用的内存超过预定阈值的情况下,内存监管模块控制源线程暂停向任务队列中放入新的待处理任务。
可选地,工作线程在与任务队列交互过程中,对任务队列进行加锁;并且,在工作线程与任务队列交互完毕后,释放任务队列的锁。
可选地,任务队列分为计算任务队列和IO任务队列,并且,工作线程分为计算工作线程和IO工作线程,计算工作线程仅从计算任务队列中取出待处理任务,IO工作线程仅从IO任务队列中取出待处理任务,工作线程根据后续操作步骤是计算操作步骤还是IO操作步骤,将新的待处理任务放入计算任务队列或IO任务队列。
可选地,在数据流处理之中的起始操作步骤为数据输入步骤的情况下,起始操作的后续操作步骤包括用于对读取的待操作分批数据进行接续处理的操作步骤和数据输入步骤本身,其中,数据输入步骤单独构成用于读取待操作分批数据的待处理任务。
可选地,工作线程确定模块根据对数据流并行处理的机器的物理参数,确定多个工作线程。
可选地,数据流处理能够用计算图表征,计算图是由至少两个操作步骤和至少一个数据边构成的有向图,操作步骤表示对数据执行的某种操作,数据边表示数据的流向。
根据本发明的另一个方面,还提供了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当可执行代码被处理器执行时,使处理器执行上文述及的基于任务对数据流并行处理的方法。
根据本发明的另一个方面,还提供了一种非暂时性机器可读存储介质,其上存储有可执行代码,当可执行代码被电子设备的处理器执行时,使处理器执行上文述及的基于任务对数据流并行处理的方法。
本发明的基于任务对数据流并行处理的方法、装置、设备及存储介质,以数据和操作步骤为线索,按照数据的处理流程,将待处理的操作步骤与相应的待操作数据打包成待处理任务,并将打包后的任务放入任务队列。这种基于任务生成式的并行化运行机制,对于基于不同操作步骤打包生成的任务,在实际运行过程中会根据其耗时自动地调整并行度。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示出了根据本发明一实施例的基于任务对数据流并行处理的方法的示意性流程图。
图2示出了工作线程和任务队列之间的交互示意图。
图3示出了执行起始操作步骤的一种实现方式示意图。
图4示出了根据本发明一实施例的并行化处理示意图。
图5示出了根据本发明另一实施例的并行化处理示意图。
图6示出了计算图的一种示意图。
图7示出了根据本发明一实施例的并行处理装置的结构的示意性方框图。
图8示出了根据本发明一个实施例的计算设备的结构的示意性方框图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
与现有的并行化处理方案不同,本发明提出了一种任务生成式的并行化运行方案。本发明的并行化运行方案是将数据和相应操作步骤整体考虑,按照数据的处理流程,将待处理的操作步骤与相应的待操作数据打包成待处理任务,并将打包后的任务放入任务队列。工作线程从任务队列中提取任务,按照操作步骤对数据进行处理,并按照数据的处理流程将处理后的操作结果数据与下游操作步骤继续打包成新的待处理任务重新放回任务队列。
基于这种任务生成式的并行化运行机制,对于基于不同操作步骤打包生成的任务,在实际运行过程中会根据其耗时自动地调整并行度。举例来说,假设数据处理流程中某一操作步骤A耗时较多,在其上游任务执行完毕后,所生成的与操作步骤A对应的任务会不断堆积,则这些堆积的任务就会被越来越多的工作线程执行,相当于提高了并行度。
如此,本发明在设定工作线程的数量时,可以无需关注数据处理流程所包含的步骤数及不同步骤的耗时情况。进一步地,作为可选方式,可根据所使用的机器的物理参数(如CPU硬件个数、硬盘大小、网卡速度、内存大小等)设定工作线程的具体数量。即,在利用本发明的并行化处理方案配置并行度时,所需调整的参数可以只与机器硬件环境有关而与数据处理流程的复杂度无关。
图1示出了根据本发明一实施例的基于任务对数据流并行处理的方法的示意性流程图。
本发明述及的“数据流”可以看作是流式的数据,特点就是像流水一样,不是一次过来而是一点一点“流”过来,使得能够不断地按照操作步骤来处理这一点一点“流”过来的数据。在此基础上,本发明述及的对数据流并行处理,是指由于要处理的数据量较大,不能实现一次性地对全部数据的处理,或者同时对全部数据进行处理内存消耗较大,因此而需要从大量数据中分批次地取出借助多个线程并列地工作以对数据进行处理。
参见图1,在步骤S110,确定多个工作线程。
这里,可人为指定工作线程的数量,或者,可考虑硬件环境和/或网络资源等来确定工作线程的数量。作为示例,可以根据对数据流执行并行处理的机器的物理参数,确定工作线程的数量。例如可以根据机器的CPU硬件个数、硬盘大小、网卡速度、内存大小等物理参数确定工作线程的数量,具体的确定机制将在下文做进一步说明,此处暂不赘述。
在步骤S120,通过多个工作线程之中的每一个工作线程,分别从任务队列中取出待处理任务,以针对取出的待处理任务进行处理。
待处理任务由数据流之中的待操作分批数据与数据流处理之中的相应操作步骤打包而成。其中,待操作分批数据可以是执行单次操作所针对的数据,也可以是重复执行多次操作所针对的数据。例如,假设要处理的数据为文件A,其中文件A中的每行数据表示一个整数,操作步骤为将每一个整数计算平方,则待操作分批数据可以是文件A中的每行数据,此时每个待处理任务对应一个整数,用于将这个整数计算平方;另外,待操作分批数据也可以是文件A中的多行数据,此时每个待处理任务对应多个整数,用于将这多个整数分别计算平方。
图2示出了工作线程和任务队列之间的交互示意图。
如图2所示,每一个工作线程可从任务对列中取出任务,并针对其中的待操作分批数据来执行相应的操作步骤。此后,每一个工作线程还可以将处理后得到的操作结果数据作为新的待操作分批数据与相应操作步骤的后续操作步骤打包成新的待处理任务,以放入任务队列。
作为本发明的一个可选实施例,在数据流处理过程中具有分支结构的情况下,每一个工作线程在从任务队列中取出任务并处理完成后,还可以将处理后得到的操作结果数据作为新的待操作分批数据与其分支条件被满足的分支的后续操作步骤打包成新的待处理任务,以放入任务队列。由此,本发明还支持具有分支结构的数据流处理。
需要说明的是,在数据流处理过程中具有分支结构的情况下,分支条件可能是与操作结果数据相关的条件的判断(如操作结果数据满足的分支条件),也可能是其他当前状态的判断。
在分支条件是与操作结果数据相关的条件判断的情况下,分支条件的判断操作可以由工作线程执行。具体地,分支条件判断操作可以作为独立的操作步骤与相应的操作结果数据打包为待处理任务放入任务队列,由工作线程执行。另外,分支条件的判断操作也可以作为附加操作步骤打包在其上一个操作步骤对应的任务中,由工作线程执行。
例如,在工作线程从任务队列中取出任务并执行完毕后,根据数据处理流程,需要对操作结果数据进行分支条件的判断时,可以将操作结果数据作为新的待操作分批数据与分支条件判断操作打包生成新的待处理任务,放入任务队列。在该任务被工作线程取出后,可以执行分支条件的判断操作,根据判断结果,可以将处理后得到的操作结果数据作为新的待操作分批数据与其分支条件被满足的分支的后续操作步骤打包成新的待处理任务,以放入任务队列。
再例如,分支条件的判断操作还可以连同其上一个操作步骤与上一个操作步骤对应的待操作数据一并打包成待处理任务放入任务队列。由此,工作线程在从任务队列中取出任务进行处理,得到操作结果数据后,还可以根据任务中的分支条件的判断结果,将操作结果数据作为新的待操作分批数据与其分支条件被满足的分支的后续操作步骤打包成新的待处理任务,以放入任务队列。
作为示例,关于如何执行起始操作步骤,可采用以下的示例性方式。
方式一
对于数据流处理中的起始操作步骤,本发明可以利用额外的线程来专门地不断生成该起始操作步骤的任务,这样,剩余工作线程即可按照进程来完成后续处理。相应地,图1所示的方法可还包括:确定单独的源线程;通过源线程来专门循环地将数据流之中的待操作分批数据与数据流处理之中的起始操作步骤打包成待处理任务,以放入任务队列。
作为示例,此处述及的起始操作步骤是指除了读取数据以外执行的第一个操作步骤。也就是说,源线程可以负责不断地从数据输入端读取待操作分批数据,并将其与数据流处理中的起始操作步骤(例如,读取数据之后的第一个操作步骤)打包生成待处理任务放入任务队列,此处一般是从硬盘或网络读取数据,不带有CPU计算。
方式二
在数据流处理之中的起始操作步骤本身为数据输入步骤的情况下,起始操作步骤的后续操作步骤可以包括两个,一个是用于对读取的待操作分批数据进行接续处理的操作步骤,一个是数据输入步骤本身,其中,数据输入步骤单独构成用于读取待操作分批数据的待处理任务。
由此,在本实施例中,可以在初始阶段将数据输入步骤本身打包成一个待处理任务,该任务的执行目的就是读取相应的待处理分批数据。在这种情况下,工作线程(例如,下文述及的IO工作线程)在从任务队列中取出该任务并通过执行该任务而读取数据完毕后,工作线程不仅会将操作结果数据作为新的待操作分批数据与对读取的待操作分批数据进行接续处理的操作步骤打包为新的待处理任务,还会生成用于读取下一批的待读取数据的待处理任务。
图3示出了执行起始操作步骤的一种实现方式示意图。其中图3中示出的箭头表示任务被执行后新生成的任务的流向。
参见图3,假设数据流的处理流程包括N(N≥2)个步骤,其中起始操作步骤为数据输入步骤,数据输入步骤对应的初始任务用数字1表示,后续其它处理步骤对应的任务用2、3、4…N表示。对于基于数据输入步骤生成的初始任务1,工作线程在执行任务1后,不仅会打包生成任务2,还会生成新的初始任务1,而新的初始任务1由工作线程执行后,也会生成任务2和新的初始任务1,以此类推。可见,这种情况下,仅需生成一个初始任务1,在任务的不断执行过程中,即可完成对所有数据的读取。
在数据的处理过程中,可能会存在依赖或其他特殊关系,例如某个数据的计算可能依赖其他数据的计算结果,因此任务队列可不设置数量上限,以避免引起死锁。
而不引入数量上限容易导致某些情况下使用的内存不断扩大,为了解决这个问题,本发明可以引入内存监管模块,以控制总内存开销。内存监管模块可以监控对数据流并行处理过程中的内存使用情况。相应地,图1所示的方法可还包括:监控对数据流并行处理过程中的内存使用情况;在当前使用的内存超过预定阈值的情况下,源线程暂停向所述任务队列中放入新的待处理任务。
图4示出了根据本发明一实施例的并行化处理示意图。
参见图4,工作线程和源线程在申请或释放内存时,可以向内存监管模块申请或报备,使得内存监管模块可以知道当前内存的使用情况。在工作线程和源线程申请或释放的内存较小的情况下,与内存监管模块的交互会影响工作效率,因此优选地,工作线程和源线程可以仅在申请或释放的内存较大的情况下,向内存监管模块申请或报备(即很小的中间变量消耗可以不与内存监管模块交互)。在当前使用的内存超过预定阈值的情况下,内存监管模块可以控制源线程暂停向任务队列中放入新的待处理任务,等后续任务释放掉一定内存之后源线程再继续向任务队列输入新的待处理任务。
任务队列中存储生成的任务,工作线程或源线程在与任务队列交互过程中,例如从任务队列取出任务或向任务队列添加新任务时,优选地可以对任务队列进行加锁,在工作线程或源线程与任务队列交互完毕后,释放任务队列的锁,以避免引起冲突,如不同工作线程争抢同一任务而引起的冲突。其中,当任务的计算量较大时可以忽略锁操作带来的时间消耗。
由于在并行化处理过程中,任何中间过程都可能会导致死锁,因此为了避免死锁问题,在当前使用的内存超过预定阈值的情况下,内存监管模块可以优选地仅控制源线程暂停向任务队列中放入新的待处理任务。
假设文件中每行数据表示一个整数,以数据处理任务为对文件中的整数执行平方运算为例,假设启动了三个工作线程和一个源线程,首先源线程从文件读入一行数据a,并将平方操作与数据a打包成任务A1放入任务队列,然后源线程会陆续将与数据行b、c、d和e对应的任务B1、C1、D1、E1放入任务队列。工作线程1从任务队列中取出A1,执行后得到数据a^2,将写入文件的操作与a^2打包成任务A2放回队列,同一时间其余的工作线程也会将B2、C2生成并放回队列,工作线程1执行完毕后继续从队列中取出D1并执行。
假设平方操作是一种非常复杂的计算操作,其耗时非常长,而源线程从文件读取的过程很快,平方操作任务会在任务队列中不断积累,若设置的阈值是同一时间存在在内存中的数据行数不能超过五,则在源线程放入E1之后,内存使用已到达上限,当源线程想向队列放入F1时,内存监管模块会暂停其操作,等待工作线程释放掉足够内存之后再恢复源线程的任务输入。其中,可以是内存监管模块向源线程发送暂停信号,也可以是源线程与任务队列的交互返回值为失败,或者还可以是源线程在读取F1之前或放入F1之前与内存监管模块进行交互,这些都属于实现细节,具体可以根据实际情况选择。
假设文件的读写耗时都很少,而计算平方的过程计算耗时很长,则计算平方的任务会越累越多,其被工作线程执行的概率就很大。而如果平方的计算时间也很少,则计算平方的任务和写入文件的任务在任务队列中的数量就会基本相当,被执行的概率也基本一样,相当于他们平分了计算资源。
可见,本发明的方案并没有涉及任何基于操作步骤的线程数配置,也就是说,本发明的这种根据任务复杂度自适应并行度调整机制完全不需要人为的配置,只需要方案的运行分配一定的资源,它便可以以最合适的配比完成数据的处理流程。
图5是示出了根据本发明另一实施例的并行化处理示意图。
参见图5,为了克服工作线程在IO和CPU等计算硬件之间上切换操作带来的消耗,可以将任务队列分为IO任务和计算任务队列(如CPU任务队列)和IO任务队列,相应地,工作线程可以分为计算工作线程(如CPU工作线程)和IO工作线程。
计算工作线程仅从计算任务队列中取出待处理任务,IO工作线程仅从IO任务队列中取出待处理任务。无论是计算工作线程还是IO工作线程,其在取出任务并处理完成后,还根据后续操作步骤是计算操作步骤还是IO操作步骤,将打包生成的新的待处理任务放入计算任务队列或IO任务队列。如此可以保证工作线程的操作始终对应同一类硬件,从而可以避免工作线程在不同硬件上的切换带来的额外开销。
在本实施例中,上文述及的源线程的任务可以合并进IO工作线程,即可以由IO工作线程实现任务队列的初始化。
以起始操作步骤为数据输入步骤为例,数据输入操作步骤的下游可同时包括两个操作步骤,一个是用于对读取的待操作分批数据进行接续处理的操作步骤,一个为数据输入步骤本身。在这种情况下,数据输入步骤可单独构成用于读取待操作分批数据的待处理任务。
具体来说,起始操作步骤可单独作为初始任务被放入IO任务队列。IO工作线程从IO任务队列取出初始任务并通过执行该初始任务而读取数据,在数据读取完毕后,IO工作线程可以将读取的数据与数据输入步骤的下游操作步骤打包为任务(一般是计算任务),放入相应的任务队列(一般是计算任务队列)。并且,在数据读取完毕后,IO工作线程还可以将针对下一批要读取的待操作分批数据的起始操作步骤单独构成新的初始任务(IO任务),放入IO任务队列。如此,便可以源源不断的产生读取任务(即初始任务)直到读取完所有数据。
在并行化运行过程中任何中间过程(如工作线程执行任务的过程)被中断都可能会导致死锁,为了避免死锁问题,在内存监管模块监控到当前使用内存超过阈值时,同样可以只暂停向任务队列中放入数据读取的任务,即数据输入的源头。
可见,在本实施例中,需要外部的配置项只有计算工作线程数、IO工作线程数以及内存监管模块的内存监管上限,计算工作线程数一般来说与计算机的CPU硬件个数有关,IO工作线程数一般与机器的硬盘和网卡有关,内存监管模块的内存监控阈值与内存大小有关,这些都是硬件决定的,与实际任务无关。相比于传统的异步IO方式,大大减少了配置项,而且对于相同的物理环境可以使用完全相同的参数而不会影响任务完成的速度。
根据本发明的示例性实施例,数据流处理可表征为计算图。具体说来,在数据处理平台上,计算图因为其表达能力强、简单易懂而被广泛使用。计算图是由操作步骤(每个操作步骤可看做计算图中的一个节点)和数据边构成的有向图,操作步骤表示对数据进行的某种操作,数据边表示数据按这条有向边的流向,在执行完一个操作后进入下一个操作。
举例来说,假设有一个文件,里面每行是一个整数,现在的计算图旨在将每一个数平方再储存到一个新的文件中,整个计算过程分成三个操作步骤,读取,计算,存储,其计算图如图6所示。
本发明的并行化处理方案可以结合计算图实现,例如可以实施为一种动态调度任务的计算图运行框架。具体地,计算图运行框架可以按照计算图示出的步骤执行顺序,将计算图上待处理的操作步骤和相关数据打包生成一个任务,放入任务队列,启动若干线程作为工作线程,工作线程每次从任务队列中取出一个执行,然后按照计算图,将执行结果数据与其下游操作步骤打包生成新的任务,再放回队列。
关于方案的具体实现过程可以参见上文相关说明,此处不再赘述。需要说明的是,在实施为一种计算图运行框架时,在为计算图配置并行度时,所需调整的参数大幅减少。作为示例,参数可只与机器硬件环境有关而与计算图的实际运行内容无关,而且对于相同的物理环境可以使用完全相同的参数而不会影响任务完成的速度。
本发明的基于任务对数据流并行处理的方法还可以实现为一种基于任务对数据流并行处理的装置。图7是示出了根据本发明一实施例的并行处理装置的结构的示意性方框图。其中,装置中的各功能模块可以由实现本发明原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图7所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。下面仅就装置可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文描述,这里不再赘述。
参见图7,并行处理装置700包括工作线程确定模块710和任务处理模块720。
工作线程确定模块710用于确定多个工作线程,作为示例,工作线程确定模块710具体可以根据所使用的机器的物理参数确定工作线程的数量。例如在工作线程分为计算工作线程和IO工作线程的情况下,工作线程确定模块710可以根据所使用的机器的CPU硬件个数确定计算工作线程数,根据机器的硬盘和网卡确定IO工作线程数。
任务处理模块720用于通过多个工作线程之中的每一个工作线程,分别从任务队列中取出待处理任务,以针对取出的待处理任务进行处理,其中,待处理任务由数据流之中的待操作分批数据与数据流处理之中的相应操作步骤打包而成。
工作线程在与任务队列交互过程中,可以对任务队列进行加锁;并且,在工作线程与任务队列交互完毕后,释放任务队列的锁。其中,工作线程与任务队列的其它交互细节可以参见上文相关描述,此处不再赘述。
优选地,任务队列分为计算任务队列和IO任务队列,并且,工作线程分为计算工作线程和IO工作线程,计算工作线程仅从计算任务队列中取出待处理任务,IO工作线程仅从IO任务队列中取出待处理任务,工作线程根据后续操作步骤是计算操作步骤还是IO操作步骤,将新的待处理任务放入计算任务队列或IO任务队列。
优选地,数据流处理能够用计算图表征,计算图是由至少两个操作步骤和至少一个数据边构成的有向图,操作步骤表示对数据执行的某种操作,数据边表示数据的流向
如图7所示,并行处理装置700还可以可选地包括图中虚线框所示的源线程确定模块730。
源线程确定模块730可以用于确定单独的源线程。其中,任务处理模块720可以通过源线程来专门循环地将数据流之中的待操作分批数据与数据流处理之中的起始操作步骤打包成待处理任务,以放入任务队列。
可选地,在数据流处理之中的起始操作步骤为数据输入步骤的情况下,起始操作步骤的后续操作步骤可以包括两个,一个是用于对读取的待操作分批数据进行接续处理的操作步骤,一个是数据输入步骤本身,其中,数据输入步骤单独构成用于读取待操作分批数据的待处理任务。
如图7所示,并行处理装置700还可以可选地包括图中虚线框所示的内存监管模块740。
内存监管模块740可以监控对数据流并行处理过程中的内存使用情况,并且在当前使用的内存超过预定阈值的情况下,内存监管模块740可以控制源线程暂停向任务队列中放入新的待处理任务。
图8是示出了根据本发明一个实施例的计算设备800的结构的示意性方框图。其中,计算设备800可以是可以实施为各种类型的计算装置,例如台式机、便携式计算机、平板电脑、智能手机、个人数据助理(PDA),或者其他类型的计算机装置,但是不限于任何特定形式。
如图8所示,本发明的计算设备800可以包括处理器810以及存储器820。处理器810可以是一个多核的处理器,也可以包含多个处理器。在一些实施例中,处理器810可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(GPU)、数字信号处理器(DSP)等等。在一些实施例中,处理器810可以使用定制的电路实现,例如特定用途集成电路(application specific integrated circuit,ASIC)或者现场可编程逻辑门阵列(field programmable gate arrays,FPGA)。
存储器820可以包括各种类型的存储单元,例如系统内存、只读存储器(ROM),和永久存储装置。其中,ROM可以存储处理器910或者计算机的其他模块需要的静态数据或者指令。永久存储装置可以是可读写的存储装置。永久存储装置可以是即使计算机断电后也不会失去存储的指令和数据的非易失性存储设备。在一些实施方式中,永久性存储装置采用大容量存储装置(例如磁或光盘、闪存)作为永久存储装置。另外一些实施方式中,永久性存储装置可以是可移除的存储设备(例如软盘、光驱)。系统内存可以是可读写存储设备或者易失性可读写存储设备,例如动态随机访问内存。系统内存可以存储一些或者所有处理器在运行时需要的指令和数据。此外,存储器820可以包括任意计算机可读存储媒介的组合,包括各种类型的半导体存储芯片(DRAM,SRAM,SDRAM,闪存,可编程只读存储器),磁盘和/或光盘也可以采用。在一些实施方式中,存储器820可以包括可读和/或写的可移除的存储设备,例如激光唱片(CD)、只读数字多功能光盘(例如DVD-ROM,双层DVD-ROM)、只读蓝光光盘、超密度光盘、闪存卡(例如SD卡、min SD卡、Micro-SD卡等等)、磁性软盘等等。计算机可读存储媒介不包含载波和通过无线或有线传输的瞬间电子信号。
在本发明实施例中,存储器820上存储有可执行代码,处理器810可以执行存储在存储器820上的可执行代码。当可执行代码被处理器810执行时,可以使处理器820执行本发明的基于任务对数据流并行处理的方法。其中,存储器820上除了存储可执行代码,还可以存储处理器810在执行本发明过程中所需的部分或所有数据。
上文中已经参考附图详细描述了根据本发明的基于任务对数据流并行处理的方法、装置及计算设备。
此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。
或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (10)
1.一种基于任务对数据流并行处理的方法,包括:
确定多个工作线程;
通过所述多个工作线程之中的每一个工作线程,分别从任务队列中取出待处理任务,以针对取出的待处理任务进行处理,
其中,待处理任务由数据流之中的待操作分批数据与数据流处理之中的相应操作步骤打包而成。
2.根据权利要求1所述的方法,还包括:
所述每一个工作线程将处理后得到的操作结果数据作为新的待操作分批数据与所述相应操作步骤的后续操作步骤打包成新的待处理任务,以放入任务队列。
3.根据权利要求1所述的方法,还包括:
确定单独的源线程;
通过源线程来专门循环地将数据流之中的待操作分批数据与数据流处理之中的起始操作步骤打包成待处理任务,以放入所述任务队列。
4.根据权利要求2所述的方法,其中,所述任务队列分为计算任务队列和IO任务队列,并且,所述工作线程分为计算工作线程和IO工作线程,所述计算工作线程仅从所述计算任务队列中取出待处理任务,所述IO工作线程仅从所述IO任务队列中取出待处理任务,
所述工作线程根据所述后续操作步骤是计算操作步骤还是IO操作步骤,将所述新的待处理任务放入计算任务队列或IO任务队列。
5.根据权利要求4所述的方法,其中,在数据流处理之中的起始操作步骤为数据输入步骤的情况下,所述起始操作的后续操作步骤包括用于对读取的待操作分批数据进行接续处理的操作步骤和所述数据输入步骤本身,
其中,数据输入步骤单独构成用于读取待操作分批数据的待处理任务。
6.根据权利要求1所述的方法,其中,根据对数据流并行处理的机器的物理参数,确定所述多个工作线程。
7.根据权利要求1至6中任何一项所述的方法,其中,所述数据流处理能够用计算图表征,所述计算图是由至少两个操作步骤和至少一个数据边构成的有向图,所述操作步骤表示对数据执行的某种操作,所述数据边表示数据的流向。
8.一种基于任务对数据流并行处理的装置,包括:
工作线程确定模块,用于确定多个工作线程;
任务处理模块,用于通过所述多个工作线程之中的每一个工作线程,分别从任务队列中取出待处理任务,以针对取出的待处理任务进行处理,
其中,待处理任务由数据流之中的待操作分批数据与数据流处理之中的相应操作步骤打包而成。
9.一种计算设备,包括:
处理器;以及
存储器,其上存储有可执行代码,当所述可执行代码被所述处理器执行时,使所述处理器执行如权利要求1-7中任何一项所述的方法。
10.一种非暂时性机器可读存储介质,其上存储有可执行代码,当所述可执行代码被电子设备的处理器执行时,使所述处理器执行如权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010584436.5A CN111752971B (zh) | 2017-12-20 | 基于任务并行处理数据流的方法、装置、设备及存储介质 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010584436.5A CN111752971B (zh) | 2017-12-20 | 基于任务并行处理数据流的方法、装置、设备及存储介质 | |
CN201711381582.2A CN108121792B (zh) | 2017-12-20 | 2017-12-20 | 基于任务并行处理数据流的方法、装置、设备及存储介质 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711381582.2A Division CN108121792B (zh) | 2017-12-20 | 2017-12-20 | 基于任务并行处理数据流的方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111752971A true CN111752971A (zh) | 2020-10-09 |
CN111752971B CN111752971B (zh) | 2024-06-28 |
Family
ID=
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113283991A (zh) * | 2021-06-08 | 2021-08-20 | 中国人民银行数字货币研究所 | 一种区块链上交易数据的处理方法及装置 |
CN114422498A (zh) * | 2021-12-14 | 2022-04-29 | 杭州安恒信息技术股份有限公司 | 大数据实时处理方法、系统、计算机设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101655828A (zh) * | 2008-08-18 | 2010-02-24 | 中国人民解放军信息工程大学 | 基于任务数据流驱动的高效能超级计算系统的设计方法 |
CN101719929A (zh) * | 2009-11-20 | 2010-06-02 | 山东中创软件商用中间件股份有限公司 | 一种实现Web Service下实时数据传输的方法 |
CN102722355A (zh) * | 2012-06-04 | 2012-10-10 | 南京中兴软创科技股份有限公司 | 基于工作流机制的并发式etl转换方法 |
CN103795596A (zh) * | 2014-03-03 | 2014-05-14 | 北京邮电大学 | 可编程控制的sdn网络测量系统和测量方法 |
CN106325980A (zh) * | 2015-06-30 | 2017-01-11 | 中国石油化工股份有限公司 | 一种多线程并发系统 |
US20170075721A1 (en) * | 2015-09-16 | 2017-03-16 | Salesforce.Com, Inc. | Providing strong ordering in multi-stage streaming processing |
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101655828A (zh) * | 2008-08-18 | 2010-02-24 | 中国人民解放军信息工程大学 | 基于任务数据流驱动的高效能超级计算系统的设计方法 |
CN101719929A (zh) * | 2009-11-20 | 2010-06-02 | 山东中创软件商用中间件股份有限公司 | 一种实现Web Service下实时数据传输的方法 |
CN102722355A (zh) * | 2012-06-04 | 2012-10-10 | 南京中兴软创科技股份有限公司 | 基于工作流机制的并发式etl转换方法 |
CN103795596A (zh) * | 2014-03-03 | 2014-05-14 | 北京邮电大学 | 可编程控制的sdn网络测量系统和测量方法 |
CN106325980A (zh) * | 2015-06-30 | 2017-01-11 | 中国石油化工股份有限公司 | 一种多线程并发系统 |
US20170075721A1 (en) * | 2015-09-16 | 2017-03-16 | Salesforce.Com, Inc. | Providing strong ordering in multi-stage streaming processing |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113283991A (zh) * | 2021-06-08 | 2021-08-20 | 中国人民银行数字货币研究所 | 一种区块链上交易数据的处理方法及装置 |
CN114422498A (zh) * | 2021-12-14 | 2022-04-29 | 杭州安恒信息技术股份有限公司 | 大数据实时处理方法、系统、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108121792B (zh) | 2020-06-26 |
CN108121792A (zh) | 2018-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108121792B (zh) | 基于任务并行处理数据流的方法、装置、设备及存储介质 | |
US11138048B2 (en) | Work stealing in heterogeneous computing systems | |
US9135077B2 (en) | GPU compute optimization via wavefront reforming | |
US10242420B2 (en) | Preemptive context switching of processes on an accelerated processing device (APD) based on time quanta | |
US8963933B2 (en) | Method for urgency-based preemption of a process | |
US9996386B2 (en) | Mid-thread pre-emption with software assisted context switch | |
US10402223B1 (en) | Scheduling hardware resources for offloading functions in a heterogeneous computing system | |
US9354892B2 (en) | Creating SIMD efficient code by transferring register state through common memory | |
KR102024283B1 (ko) | 다중스레드 컴퓨팅 | |
US9632559B2 (en) | Delaying execution in a processor to increase power savings | |
US20120284720A1 (en) | Hardware assisted scheduling in computer system | |
CN110308982B (zh) | 一种共享内存复用方法及装置 | |
JP2010079622A (ja) | マルチコアプロセッサシステム、および、そのタスク制御方法 | |
US9471387B2 (en) | Scheduling in job execution | |
US20140101668A1 (en) | Adaptive Auto-Pipelining for Stream Processing Applications | |
US11816061B2 (en) | Dynamic allocation of arithmetic logic units for vectorized operations | |
US10289418B2 (en) | Cooperative thread array granularity context switch during trap handling | |
US9122522B2 (en) | Software mechanisms for managing task scheduling on an accelerated processing device (APD) | |
US20120204014A1 (en) | Systems and Methods for Improving Divergent Conditional Branches | |
WO2012082777A1 (en) | Managed task scheduling on an accelerated processing device (apd) | |
WO2018206793A1 (en) | Multicore processing system | |
US9170820B2 (en) | Syscall mechanism for processor to processor calls | |
CN111209079A (zh) | 一种基于鲲鹏处理器的调度方法、装置及介质 | |
CN111752971B (zh) | 基于任务并行处理数据流的方法、装置、设备及存储介质 | |
JP2018538632A (ja) | ノードの再起動後にデータを処理する方法及びデバイス |
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 |