用于并发执行任务的方法与设备
技术领域
本发明涉及计算机领域,尤其涉及一种用于并发执行任务的技术。
背景技术
在大型应用系统中,为了提高任务的执行效率,一般通过任务并发执行来实现,因此,如何方便高效地实现任务的并发执行成为亟待解决的问题。
现有技术中,为了实现任务的并发执行,一般会通过数据库连接记录或者多线程记录的方式。其中,数据库连接记录的方式通过查询一条数据进行执行,并记录这条数据与这个数据库的连接关系;多线程记录的方式通过每一个线程执行一个任务,并记录这个任务与此线程的关系。这两种方式都要记录任务与数据库或者线程的关系,效率较低,实现比较复杂。
发明内容
本申请的目的是提供一种用于并发执行任务的方法与设备,以解决并发执行任务实现比较复杂的问题。
根据本申请的一个方面,提供了一种用于并发执行任务的方法,其中,该方法包括:
获取待执行的多个任务;
通过并发执行的多个线程更新所述多个任务中第一任务的状态为执行中;
当所述第一任务的状态被所述多个线程中的第一线程更新为执行中,通过所述第一线程执行所述第一任务。
根据本申请的另一方面,还提供了一种用于并发执行任务的设备,其中,该设备包括:
获取装置,用于获取待执行的多个任务;
更新装置,用于通过并发执行的多个线程更新所述多个任务中第一任务的状态为执行中;
执行装置,用于当所述第一任务的状态被所述多个线程中的第一线程更新为执行中,通过所述第一线程执行所述第一任务。
与现有技术相比,本申请通过获取待执行的多个任务,包括数据库的记录或者文件中的记录等,然后通过并发执行的多个线程更新所述多个任务中第一任务的状态为执行中,当所述第一任务的状态被所述多个线程中的第一线程更新为执行中,通过所述第一线程执行所述第一任务,这种方式简化了任务并发执行的过程,方便实现,耗费资源较少。
而且,本申请还可以通过所述多个线程中除所述第一线程外的其他线程对所述多个任务中除所述第一任务外的其他任务迭代进行更新与执行操作,直至满足预定的停止触发条件。其中,所述停止触发条件包括:所述多个线程均在执行任务、所述多个任务被执行完毕或在执行中、或者用户定义的其他停止条件。通过停止触发条件可以判断任务的执行状态,从而可以跳过满足停止触发条件的任务,继续对其他任务进行更新与执行操作,这种方式简单易行,能够有效提高效率。
此外,本申请还可以根据所述多个线程的线程数量信息确定所述每批任务数量信息,并根据预定的每批任务数量信息,从所述多个候选任务中优选多个任务以供线程更新执行,其中,所述多个任务对应的任务数量信息小于或等于所述每批任务数量信息,通过在多个候选任务中优选出多个任务的方式,能够有效提高线程查询更新任务的效率,从而提高整个并发任务执行的效率。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的一种用于并发执行任务的方法流程图;
图2示出根据本申请一个优选实施例的一种用于并发执行任务的方法流程图;
图3示出根据本申请另一个方面的一种用于并发执行任务的设备示意图;
图4示出根据本申请一个优选实施例的一种用于并发执行任务的设备示意图;
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本发明作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
为更进一步阐述本申请所采取的技术手段及取得的效果,下面结合附图及较佳实施例,对本申请的技术方案,进行清楚和完整的描述。
图1展示了根据本申请的一个方面提供的一种用于并发执行任务的方法,其中,该方法包括:
S1获取待执行的多个任务;
S2通过并发执行的多个线程更新所述多个任务中第一任务的状态为执行中;
S3当所述第一任务的状态被所述多个线程中的第一线程更新为执行中,通过所述第一线程执行所述第一任务。
在该实施例中,在所述步骤S1中,设备1获取待执行的多个任务;其中所述任务可以包括数据库的记录或者文件中的记录等,所述多个任务是构建的所有待执行的任务的一部分,具体地,获取待执行的多个任务的方式可包括将所述所有待执行的任务分成几部分,每一部分就包含待执行的多个任务。例如,所有待执行的任务有50条,可以将所述50条任务分成5部分,每一部分包含10条待执行任务,选取所述5部分中的一部分,即10条待执行任务作为待执行的多个任务。
继续在该实施例中,在所述步骤S2中,设备1通过并发执行的多个线程更新所述多个任务中第一任务的状态为执行中;其中,所述第一任务是指所述并发执行的多个线程要更新的第一个任务,具体地,第一任务的确定可以通过将所述多个任务进行排序并编号,然后根据所述排序和编号来确定第一任务。例如所述多个任务包含10条,可以将这10条任务从1-10进行编号,那么1号待执行任务可以作为第一任务。其中,所述任务的状态包括:待执行、执行中和执行完毕,具体地,通过并发执行的多个线程更新所述多个任务中第一任务的状态为执行中的方式,可以通过并发执行的多个线程都对第一任务的状态由待执行状态替换为执行中状态,其中只有一个线程会将第一任务的状态更新成功。例如,并发执行的这多个线程“同时”尝试将第一任务的状态更新为“执行中”,但基于资源互斥机制,至多仅有一个线程可将第一任务的状态成功更新为“执行中”,而尝试失败的其他线程将继续尝试将下一个任务的状态更新为“执行中”;在此,本领域技术人员应能理解,“同时”是指来自不同线程的“尝试”的最大时间间隔小于或等于预定的时间间隔阈值,以使这些线程像在“同时”尝试将第一任务的状态更新为“执行中”,进一步提升了并发执行效率。
继续在该实施例中,在所述步骤S3中,当所述第一任务的状态被所述多个线程中的第一线程更新为执行中,设备1通过所述第一线程执行所述第一任务。其中,所述第一线程是指首先将所述第一任务的状态由待执行状态成功更新为执行中状态的线程,具体地,当所述第一任务的状态被所述多个线程中的第一线程更新为执行中,所述第一线程就执行该所述状态更新成功的第一任务。
优选地,其中,所述步骤S2还包括:
当所述第一任务的状态未被更新为执行中,通过所述多个线程更新所述多个任务中第三任务的状态为执行中;
其中,所述步骤S3还包括:
当所述第三任务的状态被所述多个线程中的第三线程更新为执行中,通过所述第三线程执行所述第三任务。
在该实施例中,当所述第一任务的状态未被更新为执行中,设备1通过所述多个线程更新所述多个任务中第三任务的状态为执行中;其中,所述第三任务是指所述线程要更新的第三个任务。本领域的技术人员可以理解,所述线程将所述当前任务的状态更新为执行中,则所述线程执行所述当前任务,当所述线程未将所述当前任务的状态更新为执行中,则所述线程需要继续更新所述其他任务。具体地,当所述第一任务的状态未被更新为执行中,由于第二任务正在被第二线程执行,所述其他多个线程要将第三任务的状态由待执行状态替换为执行状态,当所述第三任务的状态被所述多个线程中的第三线程更新为执行中,通过所述第三线程执行所述第三任务。
在一个优选的实施例中(参照图1),所述步骤S1包括:
S11(未示出)获取待执行的多个候选任务;
S12(未示出)从所述多个候选任务中优选多个任务以供线程更新执行。
在该实施例中,在所述步骤S11中,设备1获取待执行的多个候选任务,其中,所述多个候选任务包括所有待执行的任务,所述任务可以包括数据库的记录或者文件中的记录等,具体地,获取待执行的多个候选任务包括获取数据库记录中某一个状态下的所有数据或者文件中所有的记录等。
继续在该实施例中,在所述步骤S12中,设备1从所述多个候选任务中优选多个任务以供线程更新执行,具体地,从所述多个候选任务中优选多个任务的方式包括将所有待执行的任务分成几个部分,每个部分对应多个任务,或者,首先将所有待执行的任务按重要程度排序,然后再将待执行的任务分成几个部分。例如所述候选任务有50条,可以直接将这50条任务从1-50编号,然后优选出1-10号任务作为优选的多个任务,那么11-20号作为另一个优选的多个任务,以此类推。或者,先将这50条任务按照重要程度递减的顺序进行排序,再按照排序结果进行编号,然后优选出最重要的1-10号任务作为优选的多个任务,11-10号任务作为另一个优选的多个任务,以此类推。
优选地,其中所述步骤S12包括:根据预定的每批任务数量信息,从所述多个候选任务中优选多个任务以供线程更新执行,其中,所述多个任务对应的任务数量信息小于或等于所述每批任务数量信息。
其中,每批任务数量信息是指每次优选的多个任务的数目,具体地,需要根据每次优选的多个任务的数目从所有待执行的任务中优选出多个任务,且所述多个任务对应的任务数量信息小于或等于所述每批任务数量信息。例如,共有46条候选任务,每批任务的数量信息是10条,将所述46条候选任务从1-46进行编号,那么第一次可以选出1-10号任务作为优选的多个任务,第二次可以选出11-20号作为优选的多个任务,第三次可以选出21-30号作为优选的多个任务,第四次可以选出31-40号作为优选的多个任务,第五次选出41-46号作为优选的多个任务。
更优选地,该方法还包括S5(未示出):根据所述多个线程的线程数量信息确定所述每批任务数量信息。其中,所述多个线程的线程数量信息是指线程的总数目,本领域的技术人员可以理解,当线程的总数目比较多时,每次可以同时执行的任务数目就比较多,为了提高任务的执行效率,这时每批任务的数量信息也应该设置的比较多,而当线程的总数目比较少时,每次可以同时执行的任务数目就比较少,这时每批任务的数量信息也应该设置的比较少。具体地,根据所述多个线程的线程数量信息确定所述每批任务数量信息的方式可以将线程的总数目的倍数或者其他可以提高任务执行效率的数作为每批任务的数量信息。例如线程的总数目为5个,那么每批任务的数量信息可以设置为10,又例如线程的总数目为10个,那么每批任务的数量信息可以设置为20。
更优选地,其中所述步骤S5包括:根据所述多个线程的线程数量信息,并结合对应的任务更新成功率信息,确定所述每批任务数量信息。其中,所述任务更新成功率信息是指更新成功的任务占所有待执行任务的百分比,本领域的技术人员可以理解,当任务更新成功率比较高时,每批任务的数量信息应该设置的相对较少,而当任务更新的成功率比较低时,每批任务的数量信息应该设置的相对较多。具体地根据所述多个线程的线程数量信息,并结合对应的任务更新成功率信息,确定所述每批任务数量信息的方式,可以包括用线程的总数目除以更新成功率,作为每批任务数量信息。例如,线程的总数目为5,当任务更新成功率为50%,每批任务的数量信息可以设置为10,又例如线程的总数目为5,当任务更新成功率为30%,每批任务的数量信息可以设置为17。
本领域的技术人员应当能够理解,上述根据所述多个线程的线程数量信息,并结合对应的任务更新成功率信息,确定所述每批任务数量信息的方式仅为举例,其他现有的或者今后可能出现的根据所述多个线程的线程数量信息,并结合对应的任务更新成功率信息,确定所述每批任务数量信息的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用的方式包含于此。
在本方案的一个优选实施例中(参照图2),该方法包括:
S1获取待执行的多个任务;
S2通过并发执行的多个线程更新所述多个任务中第一任务的状态为执行中;
S3当所述第一任务的状态被所述多个线程中的第一线程更新为执行中,通过所述第一线程执行所述第一任务;
S4通过所述多个线程中除所述第一线程外的其他线程对所述多个任务中除所述第一任务外的其他任务迭代进行更新与执行操作,直至满足预定的停止触发条件。其中,图2中的步骤S1、S2、S3分别与图1实施例中的步骤S1、S2、S3相同或基本相同,故在此不再赘述,仅以引用的方式包含于此。
在所述步骤S4中,通过所述多个线程中除所述第一线程外的其他线程对所述多个任务中除所述第一任务外的其他任务迭代进行更新与执行操作,直至满足预定的停止触发条件。本领域的技术人员可以理解,当所述第一线程对所述第一任务的状态更新成功时,所述第一线程就执行所述第一任务,剩余的未对第一任务更新成功的线程,需要对除所述第一任务外的其他任务迭代更新与执行操作,直至满足预定的停止触发条件。具体地,除所述第一线程外的其他未在执行任务的线程先对第二任务的状态进行更新,更新成功的线程作为第二线程,所述第二线程执行所述第二任务,同理,除所述第二线程外的其他未在执行任务的线程,对第三任务的状态进行更新,更新成功的线程作为第三线程,所述第三线程执行所述第三任务,如此反复,直至满足预定的停止触发条件。
优选地,其中,所述停止触发条件包括以下至少任一项:
所述多个线程均在执行任务;
所述多个任务被执行完毕或在执行中;
用户定义的其他停止条件。
其中,停止更新任务状态的停止触发条件可包括如下至少任一项:
(1)所述多个线程均在执行任务;具体地,当所述线程都在执行任务时,没有多余的线程对其他任务的状态进行更新,那么只能暂时停止更新其他任务状态。例如,共有5个线程,多个任务包含10条待执行任务,那么就有可能这5个线程都在执行相应的任务,所以只能暂时停止对其他未更新状态的任务进行更新。
(2)所述多个任务被执行完毕或在执行中;具体地,当所述多个任务被执行完毕或者在执行中时,所述线程就停止更新所述多个任务的状态。例如,共有5个线程,所述多个任务包含10条任务,当这10条任务都被执行完毕或者这10条任务有部分已执行完毕,剩余的部分都在执行中,所述5个线程就停止更新所述10条任务的状态。
(3)用户定义的其他停止条件;具体地,用户可以根据自己的需要,自定义其他停止更新任务状态的停止触发条件,以实现相应的需求。
优选地,其中所述更新与执行操作包括:
S41(未示出)通过所述其他线程更新所述其他任务中第二任务的状态为执行中;
S42(未示出)当所述第二任务的状态被所述其他线程中的第二线程更新为执行中,通过所述第二线程执行所述第二任务;
S43(未示出)更新所述其他线程,并更新所述其他任务。
在该实施例中,在所述步骤S41中,设备1通过所述其他线程更新所述其他任务中第二任务的状态为执行中;本领域的技术人员可以理解,第一线程已经将第一任务的状态更新为执行中,且所述第一线程正在执行所述第一任务,为继续向下执行任务,所以除第一线程外的所述其他线程需要将所述第二任务的状态更新为执行中。其中,所述第二任务是指所述线程要更新的第二个任务,例如多个任务包含10条待执行任务,且按照编号1-10进行排序,那么2号待执行任务可以作为第二任务。具体地,除第一线程外的所述其他线程将所述2号待执行任务的状态由待执行状态替换为执行中状态。
继续在该实施例中,在所述步骤S42中,当所述第二任务的状态被所述其他线程中的第二线程更新为执行中,设备1通过所述第二线程执行所述第二任务;具体地,当待执行的任务的状态被相应线程更新成功时,所述相应线程要执行所述待执行的任务,所以当所述第二任务的状态被所述其他线程中的第二线程更新成功时,所述第二线程要执行所述第二任务。
继续在该实施例中,在所述步骤S43中,更新所述其他线程,并更新所述其他任务,本领域的技术人员可以理解,当所述线程将相应任务的状态更新成功后,要执行该相应任务,此时,所述在执行任务的线程处于使用状态,暂时不能继续去更新其他任务的状态,所以,可以暂时剔除所诉处于使用状态的线程或者增加已执行完相应任务的线程。具体地,更新所述其他线程的方式,可以通过暂时剔除处于使用状态的线程或者增加已执行完相应任务的线程,更新所述其他任务的方式,可以直接将已执行完毕的任务删除或者将其状态更新为执行完毕从而更新所述其他任务。例如,共有5个线程,多个任务包含10条待执行任务,并将所述10条任务从1-10编号,第一线程首先将1号任务的状态更新成功,并执行所述1号任务,此时第一线程处于使用状态,那么可以暂时剔除处于使用状态的第一线程,同时,第二线程更新2号任务的状态,并执行所述2号任务,那么第二线程处于使用状态,当第二线程在执行所述2号任务时,第一线程可能已经执行完毕1号任务,所以可以暂时剔除第二线程并增加第一线程,从而更新所述其他线程,对于已执行完毕的1号任务可以直接删除或者将其状态更新为执行完毕,从而更新所述其他任务。
与现有技术相比,本申请通过获取待执行的多个任务,包括数据库的记录或者文件中的记录等,然后通过并发执行的多个线程更新所述多个任务中第一任务的状态为执行中,当所述第一任务的状态被所述多个线程中的第一线程更新为执行中,通过所述第一线程执行所述第一任务,这种方式简化了任务并发执行的过程,方便实现,耗费资源较少。
而且,本申请还可以通过所述多个线程中除所述第一线程外的其他线程对所述多个任务中除所述第一任务外的其他任务迭代进行更新与执行操作,直至满足预定的停止触发条件。其中,所述停止触发条件包括:所述多个线程均在执行任务、所述多个任务被执行完毕或在执行中、或者用户定义的其他停止条件。通过停止触发条件可以判断任务的执行状态,从而可以跳过满足停止触发条件的任务,继续对其他任务进行更新与执行操作,这种方式简单易行,能够有效提高效率。
此外,本申请还可以根据所述多个线程的线程数量信息确定所述每批任务数量信息,并根据预定的每批任务数量信息,从所述多个候选任务中优选多个任务以供线程更新执行,其中,所述多个任务对应的任务数量信息小于或等于所述每批任务数量信息,通过在多个候选任务中优选出多个任务的方式,能够有效提高线程查询更新任务的效率,从而提高整个并发任务执行的效率。
图3展示了根据本申请的另一个方面提供的一种用于并发执行任务的设备1,其中,该设备包括:
获取装置,获取待执行的多个任务;
更新装置,通过并发执行的多个线程更新所述多个任务中第一任务的状态为执行中;
执行装置,当所述第一任务的状态被所述多个线程中的第一线程更新为执行中,通过所述第一线程执行所述第一任务。
在该实施例中,获取装置获取待执行的多个任务;其中所述任务可以包括数据库的记录或者文件中的记录等,所述多个任务是构建的所有待执行的任务的一部分,具体地,获取待执行的多个任务的方式可包括将所述所有待执行的任务分成几部分,每一部分就包含待执行的多个任务。例如,所有待执行的任务有50条,可以将所述50条任务分成5部分,每一部分包含10条待执行任务,选取所述5部分中的一部分,即10条待执行任务作为待执行的多个任务。
继续在该实施例中,更新装置通过并发执行的多个线程更新所述多个任务中第一任务的状态为执行中;其中,所述第一任务是指所述并发执行的多个线程要更新的第一个任务,具体地,第一任务的确定可以通过将所述多个任务进行排序并编号,然后根据所述排序和编号来确定第一任务。例如所述多个任务包含10条,可以将这10条任务从1-10进行编号,那么1号待执行任务可以作为第一任务。其中,所述任务的状态包括:待执行、执行中和执行完毕,具体地,通过并发执行的多个线程更新所述多个任务中第一任务的状态为执行中的方式,可以通过并发执行的多个线程都对第一任务的状态由待执行状态替换为执行中状态,其中只有一个线程会将第一任务的状态更新成功。例如,并发执行的这多个线程“同时”尝试将第一任务的状态更新为“执行中”,但基于资源互斥机制,至多仅有一个线程可将第一任务的状态成功更新为“执行中”,而尝试失败的其他线程将继续尝试将下一个任务的状态更新为“执行中”;在此,本领域技术人员应能理解,“同时”是指来自不同线程的“尝试”的最大时间间隔小于或等于预定的时间间隔阈值,以使这些线程像在“同时”尝试将第一任务的状态更新为“执行中”,进一步提升了并发执行效率。
继续在该实施例中,当所述第一任务的状态被所述多个线程中的第一线程更新为执行中,执行装置通过所述第一线程执行所述第一任务。其中,所述第一线程是指首先将所述第一任务的状态由待执行状态成功更新为执行中状态的线程,具体地,当所述第一任务的状态被所述多个线程中的第一线程更新为执行中,所述第一线程就执行该所述状态更新成功的第一任务。
优选地,其中,所述更新装置还用于:
当所述第一任务的状态未被更新为执行中,通过所述多个线程更新所述多个任务中第三任务的状态为执行中;
其中,所述执行装置还用于:
当所述第三任务的状态被所述多个线程中的第三线程更新为执行中,通过所述第三线程执行所述第三任务。
在该实施例中,当所述第一任务的状态未被更新为执行中,更新装置通过所述多个线程更新所述多个任务中第三任务的状态为执行中;其中,所述第三任务是指所述线程要更新的第三个任务。本领域的技术人员可以理解,所述线程将所述当前任务的状态更新为执行中,则所述线程执行所述当前任务,当所述线程未将所述当前任务的状态更新为执行中,则所述线程需要继续更新所述其他任务。具体地,当所述第一任务的状态未被更新为执行中,由于第二任务正在被第二线程执行,所述其他多个线程要将第三任务的状态由待执行状态替换为执行状态,当所述第三任务的状态被所述多个线程中的第三线程更新为执行中,执行装置通过所述第三线程执行所述第三任务。
在一个优选的实施例中(参照图3),所述获取装置包括:
获取单元(未示出),获取待执行的多个候选任务;
优选单元(未示出),从所述多个候选任务中优选多个任务以供线程更新执行。
在该实施例中,获取单元获取待执行的多个候选任务,其中,所述多个候选任务包括所有待执行的任务,所述任务可以包括数据库的记录或者文件中的记录等,具体地,获取待执行的多个候选任务包括获取数据库记录中某一个状态下的所有数据或者文件中所有的记录等。
继续在该实施例中,优选单元从所述多个候选任务中优选多个任务以供线程更新执行,具体地,从所述多个候选任务中优选多个任务的方式包括将所有待执行的任务分成几个部分,每个部分对应多个任务,或者,首先将所有待执行的任务按重要程度排序,然后再将待执行的任务分成几个部分。例如所述候选任务有50条,可以直接将这50条任务从1-50编号,然后优选出1-10号任务作为优选的多个任务,那么11-20号作为另一个优选的多个任务,以此类推。或者,先将这50条任务按照重要程度递减的顺序进行排序,再按照排序结果进行编号,然后优选出最重要的1-10号任务作为优选的多个任务,11-10号任务作为另一个优选的多个任务,以此类推。
优选地,其中所述优选单元用于根据预定的每批任务数量信息,从所述多个候选任务中优选多个任务以供线程更新执行,其中,所述多个任务对应的任务数量信息小于或等于所述每批任务数量信息。
其中,每批任务数量信息是指每次优选的多个任务的数目,具体地,需要根据每次优选的多个任务的数目从所有待执行的任务中优选出多个任务,且所述多个任务对应的任务数量信息小于或等于所述每批任务数量信息。例如,共有46条候选任务,每批任务的数量信息是10条,将所述46条候选任务从1-46进行编号,那么第一次可以选出1-10号任务作为优选的多个任务,第二次可以选出11-20号作为优选的多个任务,第三次可以选出21-30号作为优选的多个任务,第四次可以选出31-40号作为优选的多个任务,第五次选出41-46号作为优选的多个任务。
更优选地,该设备还包括确定装置(未示出),根据所述多个线程的线程数量信息确定所述每批任务数量信息。其中,所述多个线程的线程数量信息是指线程的总数目,本领域的技术人员可以理解,当线程的总数目比较多时,每次可以同时执行的任务数目就比较多,为了提高任务的执行效率,这时每批任务的数量信息也应该设置的比较多,而当线程的总数目比较少时,每次可以同时执行的任务数目就比较少,这时每批任务的数量信息也应该设置的比较少。具体地,根据所述多个线程的线程数量信息确定所述每批任务数量信息的方式可以将线程的总数目的倍数或者其他可以提高任务执行效率的数作为每批任务的数量信息。例如线程的总数目为5个,那么每批任务的数量信息可以设置为10,又例如线程的总数目为10个,那么每批任务的数量信息可以设置为20。
更优选地,其中所述确定装置用于根据所述多个线程的线程数量信息,并结合对应的任务更新成功率信息,确定所述每批任务数量信息。其中,所述任务更新成功率信息是指更新成功的任务占所有待执行任务的百分比,本领域的技术人员可以理解,当任务更新成功率比较高时,每批任务的数量信息应该设置的相对较少,而当任务更新的成功率比较低时,每批任务的数量信息应该设置的相对较多。具体地根据所述多个线程的线程数量信息,并结合对应的任务更新成功率信息,确定所述每批任务数量信息的方式,可以包括用线程的总数目除以更新成功率,作为每批任务数量信息。例如,线程的总数目为5,当任务更新成功率为50%,每批任务的数量信息可以设置为10,又例如线程的总数目为5,当任务更新成功率为30%,每批任务的数量信息可以设置为17。
本领域的技术人员应当能够理解,上述根据所述多个线程的线程数量信息,并结合对应的任务更新成功率信息,确定所述每批任务数量信息的方式仅为举例,其他现有的或者今后可能出现的根据所述多个线程的线程数量信息,并结合对应的任务更新成功率信息,确定所述每批任务数量信息的方式如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用的方式包含于此。
在本方案的一个优选实施例中(参照图4),该设备包括:
获取装置,获取待执行的多个任务;
更新装置,通过并发执行的多个线程更新所述多个任务中第一任务的状态为执行中;
执行装置,当所述第一任务的状态被所述多个线程中的第一线程更新为执行中,通过所述第一线程执行所述第一任务;
更新与执行装置,通过所述多个线程中除所述第一线程外的其他线程对所述多个任务中除所述第一任务外的其他任务迭代进行更新与执行操作,直至满足预定的停止触发条件。其中,图4中的获取装置、更新装置、执行装置分别与图3实施例中的获取装置、更新装置、执行装置相同或基本相同,故在此不再赘述,仅以引用的方式包含于此。
更新与执行装置通过所述多个线程中除所述第一线程外的其他线程对所述多个任务中除所述第一任务外的其他任务迭代进行更新与执行操作,直至满足预定的停止触发条件。本领域的技术人员可以理解,当所述第一线程对所述第一任务的状态更新成功时,所述第一线程就执行所述第一任务,剩余的未对第一任务更新成功的线程,需要对除所述第一任务外的其他任务迭代更新与执行操作,直至满足预定的停止触发条件。具体地,除所述第一线程外的其他未在执行任务的线程先对第二任务的状态进行更新,更新成功的线程作为第二线程,所述第二线程执行所述第二任务,同理,除所述第二线程外的其他未在执行任务的线程,对第三任务的状态进行更新,更新成功的线程作为第三线程,所述第三线程执行所述第三任务,如此反复,直至满足预定的停止触发条件。
优选地,其中,所述停止触发条件包括以下至少任一项:
所述多个线程均在执行任务;
所述多个任务被执行完毕或在执行中;
用户定义的其他停止条件。
其中,停止更新任务状态的停止触发条件可包括如下至少任一项:
(1)所述多个线程均在执行任务;具体地,当所述线程都在执行任务时,没有多余的线程对其他任务的状态进行更新,那么只能暂时停止更新其他任务状态。例如,共有5个线程,多个任务包含10条待执行任务,那么就有可能这5个线程都在执行相应的任务,所以只能暂时停止对其他未更新状态的任务进行更新。
(2)所述多个任务被执行完毕或在执行中;具体地,当所述多个任务被执行完毕或者在执行中时,所述线程就停止更新所述多个任务的状态。例如,共有5个线程,所述多个任务包含10条任务,当这10条任务都被执行完毕或者这10条任务有部分已执行完毕,剩余的部分都在执行中,所述5个线程就停止更新所述10条任务的状态。
(3)用户定义的其他停止条件;具体地,用户可以根据自己的需要,自定义其他停止更新任务状态的停止触发条件,以实现相应的需求。
优选地,其中所述更新与执行操作包括:通过所述其他线程更新所述其他任务中第二任务的状态为执行中;当所述第二任务的状态被所述其他线程中的第二线程更新为执行中,通过所述第二线程执行所述第二任务;更新所述其他线程,并更新所述其他任务。
在该实施例中,更新与执行装置通过所述其他线程更新所述其他任务中第二任务的状态为执行中;本领域的技术人员可以理解,第一线程已经将第一任务的状态更新为执行中,且所述第一线程正在执行所述第一任务,为继续向下执行任务,所以除第一线程外的所述其他线程需要将所述第二任务的状态更新为执行中。其中,所述第二任务是指所述线程要更新的第二个任务,例如多个任务包含10条待执行任务,且按照编号1-10进行排序,那么2号待执行任务可以作为第二任务。具体地,除第一线程外的所述其他线程将所述2号待执行任务的状态由待执行状态替换为执行中状态。
继续在该实施例中,当所述第二任务的状态被所述其他线程中的第二线程更新为执行中,更新与执行装置通过所述第二线程执行所述第二任务;具体地,当待执行的任务的状态被相应线程更新成功时,所述相应线程要执行所述待执行的任务,所以当所述第二任务的状态被所述其他线程中的第二线程更新成功时,所述第二线程要执行所述第二任务。
继续在该实施例中,更新与执行装置更新所述其他线程,并更新所述其他任务,本领域的技术人员可以理解,当所述线程将相应任务的状态更新成功后,要执行该相应任务,此时,所述在执行任务的线程处于使用状态,暂时不能继续去更新其他任务的状态,所以,可以暂时剔除所诉处于使用状态的线程或者增加已执行完相应任务的线程。具体地,更新所述其他线程的方式,可以通过暂时剔除处于使用状态的线程或者增加已执行完相应任务的线程,更新所述其他任务的方式,可以直接将已执行完毕的任务删除或者将其状态更新为执行完毕从而更新所述其他任务。例如,共有5个线程,多个任务包含10条待执行任务,并将所述10条任务从1-10编号,第一线程首先将1号任务的状态更新成功,并执行所述1号任务,此时第一线程处于使用状态,那么可以暂时剔除处于使用状态的第一线程,同时,第二线程更新2号任务的状态,并执行所述2号任务,那么第二线程处于使用状态,当第二线程在执行所述2号任务时,第一线程可能已经执行完毕1号任务,所以可以暂时剔除第二线程并增加第一线程,从而更新所述其他线程,对于已执行完毕的1号任务可以直接删除或者将其状态更新为执行完毕,从而更新所述其他任务。
与现有技术相比,本申请通过获取待执行的多个任务,包括数据库的记录或者文件中的记录等,然后通过并发执行的多个线程更新所述多个任务中第一任务的状态为执行中,当所述第一任务的状态被所述多个线程中的第一线程更新为执行中,通过所述第一线程执行所述第一任务,这种方式简化了任务并发执行的过程,方便实现,耗费资源较少。
而且,本申请还可以通过所述多个线程中除所述第一线程外的其他线程对所述多个任务中除所述第一任务外的其他任务迭代进行更新与执行操作,直至满足预定的停止触发条件。其中,所述停止触发条件包括:所述多个线程均在执行任务、所述多个任务被执行完毕或在执行中、或者用户定义的其他停止条件。通过停止触发条件可以判断任务的执行状态,从而可以跳过满足停止触发条件的任务,继续对其他任务进行更新与执行操作,这种方式简单易行,能够有效提高效率。
此外,本申请还可以根据所述多个线程的线程数量信息确定所述每批任务数量信息,并根据预定的每批任务数量信息,从所述多个候选任务中优选多个任务以供线程更新执行,其中,所述多个任务对应的任务数量信息小于或等于所述每批任务数量信息,通过在多个候选任务中优选出多个任务的方式,能够有效提高线程查询更新任务的效率,从而提高整个并发任务执行的效率。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。