CN103677751A - 任务并行处理方法和装置 - Google Patents
任务并行处理方法和装置 Download PDFInfo
- Publication number
- CN103677751A CN103677751A CN201210328743.2A CN201210328743A CN103677751A CN 103677751 A CN103677751 A CN 103677751A CN 201210328743 A CN201210328743 A CN 201210328743A CN 103677751 A CN103677751 A CN 103677751A
- Authority
- CN
- China
- Prior art keywords
- waiting task
- tasks
- thread
- divided
- numerical value
- 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
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请公开了一种任务并行处理方法和装置,其中,该方法包括:确定待处理任务的个数M,其中,M为正整数;根据个数M判断待处理任务能否被分为多个待处理任务集合,其中,每个待处理任务集合包括多个待处理任务且个数相同;根据个数M确定多个能将待处理任务分为多个待处理任务集合的第一数值;将待处理任务分为多个待处理任务集合,其中,每个待处理任务集合包括M/N个待处理任务,其中,N为正整数,且N是第一数值中的一个;对多个待处理任务集合中的待处理任务进行并行处理。本申请解决了现有技术中任意指定一个整数对待处理任务进行拆分而造成的对有些可以平均拆分的任务未被平均拆分而造成的资源浪费和任务执行速度降低的技术问题。
Description
技术领域
本申请涉及互联网领域,具体而言,涉及一种任务并行处理方法和装置。
背景技术
目前为了提升软件的处理能力,引入了并发处理的流程,简单地说,就是本来一件事情由一个人做,现在变成一件事情由两个或者N个人做。通过这种方式,从理论上而言任务执行的效率提升了N倍。对于在软件编程中,这种并发处理的流程更为普遍,一般将这种编程方式称作多线程编程,即,将原本一个线程处理的事情,拆分成多个线程来并发处理。
例如,对于Java数组或者是List等数据结构的循环操作,就可以拆分成多个线程来同时进行处理。假设现在有一个长度为X的Java数组的循环,就可以将这个数组拆分成N个大小为M的数组,并用N个线程分别处理这些数组。
然而,目前常用的拆分方式一般并不考虑待拆分的数组的总长度是多少,而是通过定义一个固定的数值,用当前的总数X去除以指定的这个数值进行任务的拆分,而并不考虑当前总数和这个指定数值之间的关系。例如,对于一个任务数是20的待处理任务,预先定义了数值3,那么通过现有技术的方式,该待处理任务就将被拆分为:7,7,6这样三个任务集合,这时就需要对6的任务集合进行特殊处理,而且因为每个任务集合不是等长的,因此每个任务集合的线程的处理速度也是不相同的,从而造成了资源的浪费。然而,对于任务个数是20的待处理任务是可以分为平均分为4个待处理任务集合,每个集合中都有5个待处理任务,从而每个任务集合的处理可以是相同的。相关技术中并未考虑到这个问题,从而造成了不必要的资源浪费,也从一定程度上降低了任务执行的效率。
针对上述问题,尚未提出有效的解决方法。
发明内容
本申请提供了一种任务并行处理方法和装置,以至少解决现有技术中任意指定一个整数对待处理任务进行拆分而造成的对有些可以平均拆分的任务未被平均拆分而造成的资源浪费和任务执行速度降低的技术问题。
根据本申请的一个方面,提供了一种任务并行处理方法,该方法包括:确定待处理任务的个数M,其中,M为正整数;根据个数M判断待处理任务能否被分为多个待处理任务集合,其中,每个待处理任务集合包括多个待处理任务且个数相同;若待处理任务能被分为多个待处理任务集合,则根据个数M确定多个能将待处理任务分为多个待处理任务集合的第一数值;将待处理任务分为多个待处理任务集合,其中,每个待处理任务集合包括M/N个待处理任务,其中,N为正整数,且N是第一数值中的一个;对多个待处理任务集合中的待处理任务进行并行处理。
优选地,在根据个数M判断待处理任务不能被分为多个待处理任务集合之后,上述方法还包括:若待处理任务不能被分为多个待处理任务集合,则根据M-1或M+1确定所有能将待处理任务中的M-1或M+1个任务分为多个待处理任务集合的第二数值;将待处理任务分为多个待处理任务集合,其中,每个待处理任务集合包括(M-1)/Q或(M+1)/Q个待处理任务,其中,Q为正整数,且Q是第二数值中的一个。
优选地,确定N的值包括:确定系统当前允许并行处理的线程的个数;将第一数值中与线程的个数最接近,且小于线程的个数的数值作为N的值;或者确定Q的值包括:确定系统当前允许并行处理的线程的个数;将第二数值中与线程的个数最接近,且小于线程的个数的数值作为Q的值。
优选地,根据个数M确定多个能将待处理任务分为多个待处理任务集合的第一数值包括:计算得到个数M的所有约数;将所有约数中1和M之外的数值作为所有能将待处理任务分为多个待处理任务集合的第一数值。
优选地,对多个待处理任务集合中的待处理任务进行并行处理包括:为多个待处理任务集合分配线程,其中,多个待处理任务集合中的每一个对应一个线程,线程用于处理多个待处理任务集合中的每一个待处理任务集合中的一个待处理任务;并行执行线程。
根据本申请的另一方面,提供了一种任务并行处理装置,包括:第一确定单元,用于确定待处理任务的个数M,其中,M为正整数;判断单元,用于根据个数M判断待处理任务能否被分为多个待处理任务集合,其中,每个待处理任务集合包括的待处理任务的个数相同;第二确定单元,用于当待处理任务能被分为多个待处理任务集合时,根据个数M确定多个能将待处理任务分为多个待处理任务集合的第一数值;第一划分单元,用于将待处理任务分为多个待处理任务集合,其中,每个待处理任务集合包括M/N个待处理任务,其中,N为正整数,且N是第一数值中的一个;处理单元,用于对多个待处理任务集合中的待处理任务进行并行处理。
优选地,上述装置还包括:第三确定单元,用于在判断出待处理任务不能被分为多个待处理任务集合时,根据M-1或M+1确定所有能将待处理任务中的M-1或M+1个任务分为多个待处理任务集合的第二数值;第二划分单元,用于将待处理任务分为多个待处理任务集合,其中,每个待处理任务集合包括(M-1)/Q或(M+1)/Q个待处理任务,其中,Q为正整数,且Q是第二数值中的一个。
优选地,上述装置还包括:第一确定模块,用于确定系统当前允许并行处理的线程的个数;第二确定模块,用于将第一数值中与线程的个数最接近,且小于线程的个数的数值作为N的值;或者第三确定模块,用于将第二数值中与线程的个数最接近,且小于线程的个数的数值作为Q的值。
优选地,第二确定单元包括:获取单元,用于获取个数M的所有约数;第三确定单元,用于将所有约数中1和M之外的数值作为所有能将待处理任务分为多个待处理任务集合的第一数值;存储单元,用于将第一数值用数组的形式进行存储。
优选地,处理单元包括:分配模块,用于为多个待处理任务集合分配线程,其中,多个待处理任务集合中的每一个对应一个线程,线程用于处理多个待处理任务集合中的每一个待处理任务集合中的一个待处理任务;执行模块,用于并行执行线程。
在本申请中,通过预先确定待处理任务中的任务个数,并依据该任务个数确定可以将待处理任务进行平均分配的数值集合,从该数值集合中选取一个数值对待处理任务进行拆分,从而解决了现有技术中任意指定一个整数对待处理任务进行拆分而造成的对有些可以平均拆分的任务未被平均拆分而造成的资源浪费和任务执行速度降低的技术问题,达到了提高资源利用率和提高任务处理速度的技术效果。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的任务并行处理系统的一种优选结构框图;
图2是根据本申请实施例的任务并行处理装置的一种优选结构框图;
图3是根据本申请实施例的任务并行处理装置的另一种优选结构框图;
图4是根据本申请实施例的任务并行处理装置的又一种优选结构框图;
图5是根据本申请实施例的任务并行处理装置的又一种优选结构框图;
图6是根据本申请实施例的任务并行处理方法的一种优选流程图;
图7是根据本申请实施例的任务并行处理方法的另一种优选流程图;
图8是根据本申请实施例的对数组进程拆分的一种优选流程图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
在描述本申请的各实施例的进一步细节之前,将参考图1来描述可用于实现本申请的原理的一个合适的计算体系结构。在以下描述中,除非另外指明,否则将参考由一个或多个计算机执行的动作和操作的符号表示来描述本申请的各实施例。由此,可以理解,有时被称为计算机执行的这类动作和操作包括计算机的处理单元对以结构化形式表示数据的电信号的操纵。这一操纵转换了数据或在计算机的存储器系统中的位置上维护它,这以本领域的技术人员都理解的方式重配置或改变了计算机的操作。维护数据的数据结构是具有数据的格式所定义的特定属性的存储器的物理位置。然而,尽管在上述上下文中描述本申请,但它并不意味着限制性的,如本领域的技术人员所理解的,后文所描述的动作和操作的各方面也可用硬件来实现。
转向附图,其中相同的参考标号指代相同的元素,本申请的原理被示为在一个合适的计算环境中实现。以下描述基于所述的本申请的实施例,并且不应认为是关于此处未明确描述的替换实施例而限制本申请。
图1示出了可用于这些设备的一个示例计算机体系结构的示意图。出于描述的目的,所绘的体系结构仅为合适环境的一个示例,并非对本申请的使用范围或功能提出任何局限。也不应将该计算系统解释为对图1所示的任一组件或其组合具有任何依赖或需求。
本申请的原理可以使用其它通用或专用计算或通信环境或配置来操作。适用于本申请的众所周知的计算系统、环境和配置的示例包括但不限于,个人计算机、服务器,多处理器系统、基于微处理的系统、小型机、大型计算机、以及包括任一上述系统或设备的分布式计算环境。
在其最基本的配置中,图1中的任务并行处理系统100至少包括:一个网站的服务器102以及一个或多个客户端104。服务器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置、用于存储数据的存储装置以及与客户端通信的传输装置;客户端104可以包括:微处理器MCU、与服务器通信的传输装置、与用户交互的显示装置。在本说明书和权利要求书中,“系统”也可以被定义为能够执行软件、固件或微码来实现功能的任何硬件组件或硬件组件的组合任务并行处理系统100甚至可以是分布式的,以实现分布式功能。
如本申请所使用的,术语“模块”、“组件”或“单元”可以指在任务并行处理系统100上执行的软件对象或例程。此处所描述的不同组件、模块、单元、引擎和服务可被实现为在任务并行处理系统100上执行(例如,作为单独的线程)的对象或进程。尽管此处所描述的系统和方法较佳地以软件来实现,但是硬件或软件和硬件的组合的实现也是可能并被构想的。
实施例1
图2是根据本申请实施例的任务并行处理装置200的一种优选的结构示意图,优选的,本实施例中的装置位于服务器102上或者客户端104上。
优选的,如图2所示的任务并行处理装置的一种优选的结构框图可以包括:第一确定单元202,判断单元204,第二确定单元206,第一划分单元208,以及处理单元210。下面对这几个结构进行具体的描述。
第一确定单元202,用于确定待处理任务的个数M,其中,M为正整数;
判断单元204,与第一确定单元202耦合,用于根据个数M判断待处理任务能否被分为多个待处理任务集合,其中,每个待处理任务集合包括多个待处理任务且个数相同;
即,根据待处理任务的个数来确定其是否可以平均分为多个子任务集合,以任务个数40和43为例进行说明,当任务数为40时,就可以平均将其平均分为5个每个集合中有8个任务的任务集合,然而,当任务数为43时,就只能平均分为43个任务集合,每个任务集合中仅有一个任务。对于上述情况,我们将有40个任务的算作可以被分为多个待处理任务集合,将43个任务算作不能被分为多个待处理任务集合。简言之,从数学的含义上来说,就是当任务个数为合数时,就算作可以,将任务个数为质数时就算作不可以。
第二确定单元206,与判断单元204耦合,用于当待处理任务能被分为多个待处理任务集合时,根据个数M确定多个能将待处理任务分为多个待处理任务集合的第一数值;
第一划分单元208,与第二确定单元206耦合,用于将待处理任务分为多个待处理任务集合,其中,每个待处理任务集合包括M/N个待处理任务,其中,N为正整数,且N是第一数值中的一个;
考虑到待处理任务的个数可能对应的约数不是一个,例如,40对应的除了1和40之外的约数还有:2、4、5、8、10、20。这样只要按照一定的规则从这些数值中选择一个数值作为最终的分组数即可,例如,可以选择5作为并行处理的组数,则对应的每个待处理任务集合中就有8个子任务,当选择8作为并行处理的组数时,对应的每个待处理任务集合中就有5个子任务。
处理单元210,与第一划分单元208耦合,用于对多个待处理任务集合中的待处理任务进行并行处理。
对于划分好的待处理任务集合就可以进行并行处理了,因为每个任务集合中的任务数是相同的,这样处理的速度以及所需要耗费的时间也就相同了,可以有效提高资源的利用率和任务的处理速度。优选地,可以采用线程的方式来对任务进行执行,即,可以为每个待处理任务集合分配一个线程,从而实现任务的并行处理。
在上述优选实施方式中,通过预先确定待处理任务中的任务个数,并依据该任务个数确定可以将待处理任务进行平均分配的数值集合,从该数值集合中选取一个数值对待处理任务进行拆分,从而解决了现有技术中任意指定一个整数对待处理任务进行拆分而造成的对有些可以平均拆分的任务未被平均拆分而造成的资源浪费和任务执行速度降低的技术问题,达到了提高资源利用率和提高任务处理速度的技术效果。
考虑到任务的个数可能是合数,也可能是质数,对于质数的情况,本申请实施例也给出了具体的解决方案,从实质来说,对于质数就是将其减1变为合数,这样基于得到的合数对任务进行平均拆分。对于多出来的这一个任务可以单独增加一个线程进行处理,也可以将其增加到任意一个线程中进行处理。考虑到提高任务的并行处理的速度以及资源的有效利用,优选的是增加一个单独的线程对这个多出的任务进行单独处理。在一个优选实施方式中,如图3所示,上述装置还包括:
第三确定单元302,与判断单元204耦合,用于在判断出待处理任务不能被分为多个待处理任务集合时,根据M-1或M+1确定能将待处理任务中的M-1或M+1个任务分为多个待处理任务集合的第二数值;
第二划分单元304,与第三确定单元302耦合,用于将待处理任务分为多个待处理任务集合,其中,每个待处理任务集合包括(M-1)/Q或(M+1)/Q个待处理任务,其中,Q为正整数,且Q是第二数值中的一个。
举例而言,当待处理任务中有43个任务时,因43是一个质数,只有1和自身两个约数,这个时候就可以将43减去1得到42,将42作为新的待处理任务的个数进行拆分,这样就可以将其拆分为6个任务集合,每个任务集合中有7个任务或者是拆分为7和任务集合,每个任务集合中有6个任务。然后,对于多出的一个任务进行单独的特殊处理即可。
考虑到系统的承载能力,同时并行处理的能力有时是有一定限制的,因此,在选择进行拆分的数值的时候,可以依据当前系统的并行处理能力来确定选择的拆分数值,例如,如果当前系统可以允许最多6个线程同时并行处理,那么对于42个任务的待处理任务就需要分为6个任务集合,而不分为7个任务集合。在一个优选实施方式,上述装置还包括:第一确定模块,用于确定系统当前允许并行处理的线程的个数;第二确定模块,用于将所述第二数值中与所述线程的个数最接近,且小于所述线程的个数的数值作为所述N的值;或者第三确定模块,用于将第二数值中与最大并行能力最接近,且小于最大并行能力的数值作为Q的值。
在一个优选实施方式中,如图4所示,第二确定单元206包括:
获取单元402,与判断单元204耦合,用于获取个数M的所有约数;
第三确定单元404,与获取单元402耦合,用于将所有约数中1和M之外的数值作为所有能将待处理任务分为多个待处理任务集合的第一数值;
存储单元406,与第三确定单元404耦合,用于将第一数值用数组的形式进行存储。
对于划分好的任务集合,可以是一个任务集合对应一个线程,按照线程的方式对任务集合中的任务进行并行处理。在一个优选实施方式中,如图5所示,处理单元210包括:分配模块502,用于为所述多个待处理任务集合分配线程,其中,所述多个待处理任务集合中的每一个对应一个所述线程,所述线程用于处理所述多个待处理任务集合中的每一个待处理任务集合中的一个待处理任务;执行模块504,与分配模块502耦合,用于并行执行线程。
实施例2
在图2-图5所示的任务并行处理装置的基础上,本申请提供了一种优选的任务并行处理方法。如图6所示,该方法可以包括如下步骤:
步骤S602:确定待处理任务的个数M,其中,M为正整数;
步骤S604:根据个数M判断待处理任务能否被分为多个待处理任务集合,其中,每个待处理任务集合包括多个待处理任务且个数相同;
即,根据待处理任务的个数来确定其是否可以平均分为多个子任务集合,以任务个数40和43为例进行说明,当任务数为40时,就可以平均将其平均分为5个每个集合中有8个任务的任务集合,然而,当任务数为43时,就只能平均分为43个任务集合,每个任务集合中仅有一个任务。对于上述情况,我们将有40个任务的算作可以被分为多个待处理任务集合,将43个任务算作不能被分为多个待处理任务集合。简言之,从数学的含义上来说,就是当任务个数为合数时,就算作可以,将任务个数为质数时就算作不可以。
步骤S606:若待处理任务能被分为多个待处理任务集合,则根据个数M确定多个能将待处理任务分为多个待处理任务集合的第一数值;
步骤S608:将待处理任务分为多个待处理任务集合,其中,每个待处理任务集合包括M/N个待处理任务,其中,N为正整数,且N是第一数值中的一个;
考虑到待处理任务的个数可能对应约数不是一个,例如,40对应的除了1和40之外的约数还有:2、4、5、8、10、20。这样只要按照一定的规则从这些数值中选择一个数值作为最终的分组数即可,例如,可以选择5作为并行处理的组数,则对应的每个待处理任务集合中就有8个子任务,当选择8作为并行处理的组数时,对应的每个待处理任务集合中就有5个子任务。
步骤S610:对多个待处理任务集合中的待处理任务进行并行处理。
对于划分好的待处理任务集合就可以进行并行处理了,因为每个任务集合中的任务数是相同的,这样处理的速度以及所需要耗费的时间也就相同了,可以有效提高资源的利用率和任务的处理速度。优选地,可以采用线程的方式来对任务进行执行,即,可以为每个待处理任务集合分配一个线程,从而实现任务的并行处理。
在上述优选实施方式中,通过预先确定待处理任务中的任务个数,并依据该任务个数确定可以将待处理任务进行平均分配的数值集合,从该数值集合中选取一个数值对待处理任务进行拆分,从而解决了现有技术中任意指定一个整数对待处理任务进行拆分而造成的对有些可以平均拆分的任务未被平均拆分而造成的资源浪费和任务执行速度降低的技术问题,达到了提高资源利用率和提高任务处理速度的技术效果。
考虑到任务的个数可能是合数,也可能是质数,对于质数的情况,本申请实施例也给出了具体的解决方案,从实质来说,对于质数就是将其减1变为合数,这样基于得到的合数对任务进行平均拆分。对于多出来的这一个任务可以单独增加一个线程进行处理,也可以将其增加到任意一个线程中进行处理。考虑到提高任务的并行处理的速度以及资源的有效利用,优选的是增加一个单独的线程对这个多出的任务进行单独处理。在一个优选实施方式中,在根据所述个数M判断所述待处理任务能否被分为多个待处理任务集合之后,上述方法还可以包括:
若所述待处理任务不能被分为多个待处理任务集合,则根据M-1或M+1确定所有能将所述待处理任务中的M-1或M+1个任务分为所述多个待处理任务集合的第二数值;
将所述待处理任务分为所述多个待处理任务集合,其中,每个待处理任务集合包括(M-1)/Q或(M+1)/Q个所述待处理任务,其中,所述Q为正整数,且所述Q是所述第二数值中的一个。
举例而言,当待处理任务中有43个任务时,因43是一个质数,只有1和自身两个约数,这个时候就可以将43减去1得到42,将42作为新的待处理任务的个数进行拆分,这样就可以将其拆分为6个任务集合,每个任务集合中有7个任务或者是拆分为7和任务集合,每个任务集合中有6个任务。然后,对于多出的一个任务进行单独的特殊处理即可。
考虑到系统的承载能力,同时并行处理的能力有时是有一定限制的,因此,在选择进行拆分的数值的时候,可以依据当前系统的并行处理能力来确定选择的拆分数值,例如,如果当前系统可以允许最多6个线程同时并行处理,那么对于42个任务的待处理任务就需要分为6个任务集合,而不分为7个任务集合。在一个优选实施方式,确定上述N的值包括:确定系统当前允许并行处理的线程的个数;将所述第一数值中与所述线程的个数最接近,且小于所述线程的个数的数值作为所述N的值;或者确定上述Q的值包括:确定系统当前允许并行处理的线程的个数;将所述第二数值中与所述线程的个数最接近,且小于所述线程的个数的数值作为所述Q的值。
对于上述根据所述个数M确定所有能将所述待处理任务分为所述多个待处理任务集合的第一数值就可以按照数学概念的合数的性质来确定,即确定任务个数对应的公约,如图7所示,具体包括以下步骤:
步骤S702:计算得到所述个数M的所有约数;
步骤S704:将所述所有约数中1和M之外的数值作为所有能将所述待处理任务分为所述多个待处理任务集合的第一数值。优选地,上述确定的第一数值(即,除1和自身以外的公约)可以用数组的形式进行存储,可以根据数组的长度来确定是否是合数,以及可以拆分的方式的多少。
对于划分好的任务集合,可以是一个任务集合对应一个线程,按照线程的方式对任务集合中的任务进行并行处理。在一个优选实施方式中,对多个待处理任务集合中的待处理任务进行并行处理包括:为多个待处理任务集合分配线程,其中,多个待处理任务集合中的每一个对应一个线程,线程用于处理多个待处理任务集合中的每一个待处理任务集合中的一个待处理任务;并行执行线程。
实施例3
本申请提供了一个优选的实施例来进一步对本申请进行解释,但是值得注意的是,该优选实施例只是为了更好的描述本申请,并不构成对本申请不当的限定。
考虑到相关技术中在对任务进行拆分的时候,并不考虑待拆分的数组的总长度是多少,而是通过人为指定一个数值,用当前总数X去除以指定的这个数值,从而实现拆分的目的,在这个过程中并不考虑当前总数和这个指定数值的关系。对于拆分过程中,如果出现除不尽的情况,将导致每个线程的理论耗时不一致,如果主观指定的拆分值不恰当,可能会造成很大的时间偏差,从而达不到提升任务处理效率的目的。进一步的,通过人为指定拆分数,无法根据处理数据动态计算分配。即,指定一个默认值N,无论传入的数组长度是多少,都用这个默认值去拆分,这样即没有考虑质数和合数的差异性,也无法根据实际情况进行动态调整。另外,如果指定的默认值太小,对于数组值比较大的情况,拆分效果并不理想。
基于上述这些问题,本申请实施例提出了一种采用基于约数的拆分方法,通过这种方式对于合数可以保证数组的平均性,通过算法求解X的约数,并保证X可以被整除,从而实现数组拆分的平均性,以尽量保证处理数组的每个线程的理论耗时的一致。
即使是X为质数的情况,也可以通过递减N,使得X成为一个合数,然后再采用上述基于合数的拆分方式,进行平均拆分。对于递减的差值,进行另外的处理。通过本申请中的这种拆分方式是采用最优算法计算得出的,相对于人为指定具有更高的精确度,同时也保证了数组拆分的动态性,对于比较大的数值,可以采用较大的约数进行整除拆分以保证任务执行的速度。
具体的,下面将以数组作为待处理的任务为例对上述方法进行说明。
假设待处理任务中任务个数为X,在实际应用中,该X的值可能是质数、也可能是合数。
1)对于数组长度是合数的情况,可以通过计算得到数组长度除了1和自身之外的其他约数,进行平均拆分。以X=20为例进行说明,根据上文的描述可知如果将20分为三个任务集合,则对应每个集合的任务数是7,7,6,然而,如果确定20所对应的所有约数,以数组的方式表示就是[1、2、4、5、10、20]。这时,如果选择4作为集合的个数,则其所对应的每个集合中的任务个数就都是5个。因此,如果任务个数是一个合数的话,则可以先确认该合数所对应的所有约数,然后从其对应的约数中选取一个作为集合的个数,这样所得到的每个任务集合中的任务个数都是相同的,从而可以有效避免现有技术中因选取的拆分数值不合适而造成的原本可以平均分配的待处理任务无法平均分配的技术问题,从而尽可能地保证了被拆分的数组的平均性,也间接保证了处理数组的线程在理论耗时相同。
2)对于数组长度是质数的情况,由于只有1和自身两个约数,无论是用1,还是自身去拆分,都不合适。比如一个长度为43的数组,43是质数,只能被1和43整除,如果拆分成43个长度为1的数组,再通过多线程去处理,这样的做法将消耗大量的资源。在本申请实施例中,例如:当待处理任务中有43个任务时,因43是一个质数,只有1和自身两个约数,这个时候就可以将43减去1得到42,将42作为新的待处理任务的个数进行拆分,这样就可以将其拆分为6个任务集合,每个集合中有7个任务或者是拆分为7和任务集合,每个集合中有6个任务。然后,对于多出的一个任务进行单独的特殊处理即可。
下面将基于上述的发明构思给出一个具体的实现方式进行说明,如图8所示,主要包括以下步骤:
步骤S802:获取待处理的数组或者是List。
步骤S804:通过调用数组的length属性,或者List的size方法获取待拆分的数组长度,其中,类型为int。如果确定长度为l,则说明当前的数组长度为1,无需拆分,也无需进行后续的步骤。
步骤S806:计算数组长度的约数。
本优选实施例提供了一种方法,将其定义为method,为该method函数传入参数为int类型的number和int类型的dividend。
传入获取的数组的长度(length),将其赋值给number变量,传入拆分参数dividend(优选的,默认值等于length)。
利用求余表达式%进行计算,即执行“length%dividend”的操作,如果dividend是length的约数之一,则确定dividend可以被length整除,因此上述求余表达式的结果为零,如果dividend不是length的约数之一,则求余表达式的结果不为零。
如果传入的dividend值等于number的值,则dividend必为number的约数之一,优选的,该等于自身的值在本申请无效,可以将其忽略。当dividend不等于number,且通过求余运算得到的计算结果为零时,可以用一个int数组(记作:int[])记录所有求余为0的dividend值。即,对number的约数用数组的形式进行记录。
dividend递减(记作:--dividend),判断递减后的dividend是否等于1,如果不等于1,则递归调用方法method,递归时传入数组长度,赋给number变量,dividend变量传入递减后的值(即上述--dividend的结果)。
重复上述的求余操作,以判断递减后的dividend值是否可以被number整除,对可以整除的数值进行记录,并继续执行上述的递减和求余判断操作。以此类推直至递减后的值为1为止。
当递减后的值等于1时,退出方法method,此时int数组中就已经记录了当前数组长度的所有的约数。
步骤S808:根据求约数的结果判断当前待拆分数组的长度是质数还是合数。
如果记录了计算结果的数组,长度大于0,则当前待拆分数组的长度为合数;
如果记录了计算结果的数组,长度等于0,则当前待拆分数组的长度为质数。
步骤S810:对于数组长度是合数的处理。
对于待拆分数组长度是合数的情况,在返回结果中选择某个约数,对数组进行整除,并根据整除结果,重新拆分数组后,采用多线程进行并行处理。
步骤S812:对于数组长度是质数的处理。
将当前长度递减(--length),重复上述“计算约数”的步骤,以获取递减后的数值所对应的约数,递减计算出离当前待拆分数组长度最近的一个合数M,并利用这个合数先将当前数组拆分成两个数组A和B,其中A的长度等于M,B的长度等于length-M。数组A是合数肯定可以被整除,因此,按照上述对合数的处理方式进行拆分即可。系统分配线程,处理平均拆分后的数组A,并分配一个线程单独处理数组B。
通过上述方式完成对数组的拆分,对于长度是合数的数组,可以根据约数进行平均拆分,对于长度是质数的数组,可以通过递减后再进行拆分,递减后再进行拆分的方式,在算法上做了优化,相对于人为指定一个拆分数值更为合理。通过对数据的平均拆分,使得多个线程中的每一个线程的处理速度是均等的,从总体上提高了任务的处理速度。
通过以上的描述可知,本申请具有以下优势:通过预先确定待处理任务中的任务个数,并依据该任务个数确定可以将待处理任务进行平均分配的数值集合,从该数值集合中选取一个数值对待处理任务进行拆分,从而解决了现有技术中任意指定一个整数对待处理任务进行拆分而造成的对有些可以平均拆分的任务未被平均拆分而造成的资源浪费和任务执行速度降低的技术问题,达到了提高资源利用率和提高任务处理速度的技术效果。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种任务并行处理方法,其特征在于,包括:
确定待处理任务的个数M,其中,M为正整数;
根据所述个数M判断所述待处理任务能否被分为多个待处理任务集合,其中,每个待处理任务集合包括多个所述待处理任务且个数相同;
若所述待处理任务能被分为多个待处理任务集合,则根据所述个数M确定多个能将所述待处理任务分为所述多个待处理任务集合的第一数值;
将所述待处理任务分为所述多个待处理任务集合,其中,每个待处理任务集合包括M/N个所述待处理任务,其中,所述N为正整数,且所述N是所述第一数值中的一个;
对所述多个待处理任务集合中的所述待处理任务进行并行处理。
2.根据权利要求1所述的方法,其特征在于,在根据所述个数M判断所述待处理任务能否被分为多个待处理任务集合之后,所述方法还包括:
若所述待处理任务不能被分为多个待处理任务集合,则根据M-1或M+1确定能将所述待处理任务中的M-1或M+1个任务分为所述多个待处理任务集合的第二数值;
将所述待处理任务分为所述多个待处理任务集合,其中,每个待处理任务集合包括(M-1)/Q或(M+1)/Q个所述待处理任务,其中,所述Q为正整数,且所述Q是所述第二数值中的一个。
3.根据权利要求1或2所述的方法,其特征在于,
确定所述N的值包括:确定系统当前允许并行处理的线程的个数;将所述第一数值中与所述线程的个数最接近,且小于所述线程的个数的数值作为所述N的值;或者
确定所述Q的值包括:确定系统当前允许并行处理的线程的个数;将所述第二数值中与所述线程的个数最接近,且小于所述线程的个数的数值作为所述Q的值。
4.根据权利要求1所述的方法,其特征在于,根据所述个数M确定多个能将所述待处理任务分为所述多个待处理任务集合的第一数值包括:
计算得到所述个数M的所有约数;
将所述所有约数中1和M之外的数值作为所有能将所述待处理任务分为所述多个待处理任务集合的第一数值。
5.根据权利要求1所述的方法,其特征在于,对所述多个待处理任务集合中的所述待处理任务进行并行处理包括:
为所述多个待处理任务集合分配线程,其中,所述多个待处理任务集合中的每一个对应一个所述线程,所述线程用于处理所述多个待处理任务集合中的每一个待处理任务集合中的一个待处理任务;
并行执行所述线程。
6.一种任务并行处理装置,其特征在于,包括:
第一确定单元,用于确定待处理任务的个数M,其中,M为正整数;
判断单元,用于根据所述个数M判断所述待处理任务能否被分为多个待处理任务集合,其中,每个待处理任务集合包括多个所述待处理任务且个数相同;
第二确定单元,用于当所述待处理任务能被分为多个待处理任务集合时,根据所述个数M确定多个能将所述待处理任务分为所述多个待处理任务集合的第一数值;
第一划分单元,用于将所述待处理任务分为所述多个待处理任务集合,其中,每个待处理任务集合包括M/N个所述待处理任务,其中,所述N为正整数,且所述N是所述第一数值中的一个;
处理单元,用于对所述多个待处理任务集合中的所述待处理任务进行并行处理。
7.根据权利要求6所述的装置,其特征在于,还包括:
第三确定单元,用于在判断出所述待处理任务不能被分为多个待处理任务集合时,根据M-1或M+1确定能将所述待处理任务中的M-1或M+1个任务分为所述多个待处理任务集合的第二数值;
第二划分单元,用于将所述待处理任务分为所述多个待处理任务集合,其中,每个待处理任务集合包括(M-1)/Q或(M+1)/Q个所述待处理任务,其中,所述Q为正整数,且所述Q是所述第二数值中的一个。
8.根据权利要求6或7所述的方法,其特征在于,还包括:
第一确定模块,用于确定系统当前允许并行处理的线程的个数;
第二确定模块,用于将所述第一数值中与所述线程的个数最接近,且小于所述线程的个数的数值作为所述N的值;或者
第三确定模块,用于将所述第一数值中与所述线程的个数最接近,且小于所述线程的个数的数值作为所述Q的值。
9.根据权利要求6所述的装置,其特征在于,所述第二确定单元包括:
获取单元,用于获取所述个数M的所有约数;
第三确定单元,用于将所述所有约数中1和M之外的数值作为所有能将所述待处理任务分为所述多个待处理任务集合的第一数值;
存储单元,用于将所述第一数值用数组的形式进行存储。
10.根据权利要求6所述的装置,其特征在于,所述处理单元包括:
分配模块,用于为所述多个待处理任务集合分配线程,其中,所述多个待处理任务集合中的每一个对应一个所述线程,所述线程用于处理所述多个待处理任务集合中的每一个待处理任务集合中的一个待处理任务;
执行模块,用于并行执行所述线程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210328743.2A CN103677751B (zh) | 2012-09-06 | 2012-09-06 | 任务并行处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210328743.2A CN103677751B (zh) | 2012-09-06 | 2012-09-06 | 任务并行处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103677751A true CN103677751A (zh) | 2014-03-26 |
CN103677751B CN103677751B (zh) | 2016-12-21 |
Family
ID=50315432
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210328743.2A Active CN103677751B (zh) | 2012-09-06 | 2012-09-06 | 任务并行处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103677751B (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104731663A (zh) * | 2015-03-31 | 2015-06-24 | 北京奇艺世纪科技有限公司 | 任务处理方法及系统 |
CN105022796A (zh) * | 2015-06-30 | 2015-11-04 | 北京奇艺世纪科技有限公司 | 一种文件遍历方法、装置及系统 |
CN105188112A (zh) * | 2015-06-02 | 2015-12-23 | 小米科技有限责任公司 | 休眠状态的控制方法及装置 |
CN105700958A (zh) * | 2016-01-07 | 2016-06-22 | 北京京东尚科信息技术有限公司 | 一种任务自动拆分以及子任务并行执行的方法及其系统 |
CN106354552A (zh) * | 2015-07-17 | 2017-01-25 | 宁波森浦融讯科技有限公司 | 并行计算任务分配方法和装置 |
CN106534958A (zh) * | 2016-11-14 | 2017-03-22 | 深圳Tcl数字技术有限公司 | 基于智能电视发送应用邀请的方法及系统 |
CN107992356A (zh) * | 2017-12-13 | 2018-05-04 | 上海壹账通金融科技有限公司 | 区块链事务区块处理方法、电子装置及可读存储介质 |
CN108153583A (zh) * | 2016-12-06 | 2018-06-12 | 阿里巴巴集团控股有限公司 | 任务分配方法及装置、实时计算框架系统 |
CN108268490A (zh) * | 2016-12-30 | 2018-07-10 | 华为技术有限公司 | 数值更新方法、装置及服务器 |
CN109254835A (zh) * | 2018-06-27 | 2019-01-22 | 阿里巴巴集团控股有限公司 | 批处理任务的处理方法、装置、服务器及可读存储介质 |
CN109408490A (zh) * | 2018-09-29 | 2019-03-01 | 武汉斗鱼网络科技有限公司 | 一种数组规整方法、装置、终端及可读介质 |
CN109902819A (zh) * | 2019-02-12 | 2019-06-18 | Oppo广东移动通信有限公司 | 神经网络计算方法、装置、移动终端及存储介质 |
CN112199625A (zh) * | 2020-10-27 | 2021-01-08 | 支付宝(杭州)信息技术有限公司 | 一种任务处理方法及装置 |
CN113360266A (zh) * | 2021-06-23 | 2021-09-07 | 北京百度网讯科技有限公司 | 任务处理方法和装置 |
CN113506591A (zh) * | 2021-08-09 | 2021-10-15 | 北京思朗科技有限责任公司 | 共价键势的分配方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101359295A (zh) * | 2007-08-01 | 2009-02-04 | 阿里巴巴集团控股有限公司 | 一种批量任务调度分配方法及系统 |
CN101567873A (zh) * | 2008-04-25 | 2009-10-28 | 凤凰微电子(中国)有限公司 | 一种多任务并行处理方法及系统 |
CN101821728A (zh) * | 2008-10-15 | 2010-09-01 | 甲骨文国际公司 | 批处理系统 |
CN101853182A (zh) * | 2010-05-05 | 2010-10-06 | 中兴通讯股份有限公司 | 基于数据库的任务执行方法及装置 |
-
2012
- 2012-09-06 CN CN201210328743.2A patent/CN103677751B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101359295A (zh) * | 2007-08-01 | 2009-02-04 | 阿里巴巴集团控股有限公司 | 一种批量任务调度分配方法及系统 |
CN101567873A (zh) * | 2008-04-25 | 2009-10-28 | 凤凰微电子(中国)有限公司 | 一种多任务并行处理方法及系统 |
CN101821728A (zh) * | 2008-10-15 | 2010-09-01 | 甲骨文国际公司 | 批处理系统 |
CN101853182A (zh) * | 2010-05-05 | 2010-10-06 | 中兴通讯股份有限公司 | 基于数据库的任务执行方法及装置 |
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104731663A (zh) * | 2015-03-31 | 2015-06-24 | 北京奇艺世纪科技有限公司 | 任务处理方法及系统 |
CN105188112A (zh) * | 2015-06-02 | 2015-12-23 | 小米科技有限责任公司 | 休眠状态的控制方法及装置 |
CN105022796A (zh) * | 2015-06-30 | 2015-11-04 | 北京奇艺世纪科技有限公司 | 一种文件遍历方法、装置及系统 |
CN106354552A (zh) * | 2015-07-17 | 2017-01-25 | 宁波森浦融讯科技有限公司 | 并行计算任务分配方法和装置 |
CN106354552B (zh) * | 2015-07-17 | 2019-08-06 | 宁波森浦融讯科技有限公司 | 并行计算任务分配方法和装置 |
CN105700958B (zh) * | 2016-01-07 | 2019-05-03 | 北京京东尚科信息技术有限公司 | 一种任务自动拆分以及子任务并行执行的方法及其系统 |
CN105700958A (zh) * | 2016-01-07 | 2016-06-22 | 北京京东尚科信息技术有限公司 | 一种任务自动拆分以及子任务并行执行的方法及其系统 |
CN106534958A (zh) * | 2016-11-14 | 2017-03-22 | 深圳Tcl数字技术有限公司 | 基于智能电视发送应用邀请的方法及系统 |
CN108153583B (zh) * | 2016-12-06 | 2022-05-13 | 阿里巴巴集团控股有限公司 | 任务分配方法及装置、实时计算框架系统 |
CN108153583A (zh) * | 2016-12-06 | 2018-06-12 | 阿里巴巴集团控股有限公司 | 任务分配方法及装置、实时计算框架系统 |
CN108268490B (zh) * | 2016-12-30 | 2020-12-01 | 华为技术有限公司 | 数值更新方法、装置及服务器 |
CN108268490A (zh) * | 2016-12-30 | 2018-07-10 | 华为技术有限公司 | 数值更新方法、装置及服务器 |
CN107992356B (zh) * | 2017-12-13 | 2021-09-14 | 深圳壹账通智能科技有限公司 | 区块链事务区块处理方法、电子装置及可读存储介质 |
CN107992356A (zh) * | 2017-12-13 | 2018-05-04 | 上海壹账通金融科技有限公司 | 区块链事务区块处理方法、电子装置及可读存储介质 |
CN109254835A (zh) * | 2018-06-27 | 2019-01-22 | 阿里巴巴集团控股有限公司 | 批处理任务的处理方法、装置、服务器及可读存储介质 |
CN109408490A (zh) * | 2018-09-29 | 2019-03-01 | 武汉斗鱼网络科技有限公司 | 一种数组规整方法、装置、终端及可读介质 |
CN109902819A (zh) * | 2019-02-12 | 2019-06-18 | Oppo广东移动通信有限公司 | 神经网络计算方法、装置、移动终端及存储介质 |
WO2020164469A1 (zh) * | 2019-02-12 | 2020-08-20 | Oppo广东移动通信有限公司 | 神经网络计算方法、装置、移动终端及存储介质 |
CN112199625A (zh) * | 2020-10-27 | 2021-01-08 | 支付宝(杭州)信息技术有限公司 | 一种任务处理方法及装置 |
CN113360266A (zh) * | 2021-06-23 | 2021-09-07 | 北京百度网讯科技有限公司 | 任务处理方法和装置 |
CN113360266B (zh) * | 2021-06-23 | 2022-09-13 | 北京百度网讯科技有限公司 | 任务处理方法和装置 |
CN113506591A (zh) * | 2021-08-09 | 2021-10-15 | 北京思朗科技有限责任公司 | 共价键势的分配方法及系统 |
CN113506591B (zh) * | 2021-08-09 | 2024-03-08 | 上海思朗科技有限公司 | 共价键势的分配方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103677751B (zh) | 2016-12-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103677751A (zh) | 任务并行处理方法和装置 | |
Panwar et al. | Load balancing in cloud computing using dynamic load management algorithm | |
Yang et al. | A framework for partitioning and execution of data stream applications in mobile cloud computing | |
Woodside et al. | Fast allocation of processes in distributed and parallel systems | |
Liaqat et al. | Characterizing dynamic load balancing in cloud environments using virtual machine deployment models | |
Sharma et al. | Response time based load balancing in cloud computing | |
CN103207807A (zh) | 任务调度方法和装置 | |
Mann | Rigorous results on the effectiveness of some heuristics for the consolidation of virtual machines in a cloud data center | |
Giersch et al. | Scheduling tasks sharing files on heterogeneous master–slave platforms | |
Filiposka et al. | Community-based VM placement framework | |
CN105718315A (zh) | 一种任务处理方法及服务器 | |
Velde et al. | An advanced algorithm for load balancing in cloud computing using fuzzy technique | |
Susila et al. | A fuzzy-based firefly algorithm for dynamic load balancing in cloud computing environment | |
Lim et al. | Engineering resource management middleware for optimizing the performance of clouds processing MapReduce jobs with deadlines | |
Thai et al. | Budget constrained execution of multiple bag-of-tasks applications on the cloud | |
US20120042322A1 (en) | Hybrid Program Balancing | |
Bohez et al. | Allocation algorithms for autonomous management of collaborative cloudlets | |
Mazrekaj et al. | Distributed resource allocation in cloud computing using multi-agent systems | |
Schill et al. | Power Consumption and Performance Balance (PCPB) scheduling algorithm for computer cluster | |
Pacher | Two‐level extensions of an artificial hormone system | |
Zhang et al. | An effective heuristic for due-date-constrained bag-of-tasks scheduling problem for total cost minimization on hybrid clouds | |
Meyer et al. | Pipel: exploiting resource reorganisation to optimise performance of pipeline-structured applications in the cloud | |
Marinescu et al. | Distributed hierarchical control versus an economic model for cloud resource management | |
Menouer et al. | Towards a parallel constraint solver for cloud computing environments | |
Meena et al. | Optimized task clustering for mobile cloud computing using Workflowsim |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |