任务执行方法及装置与流程

文档序号:12596619阅读:148来源:国知局
任务执行方法及装置与流程

本发明涉及计算机技术领域,具体地,涉及一种任务执行方法及装置。



背景技术:

随着科学技术的不断发展,计算机技术也得到了飞速发展,需要计算机处理的任务也越来越复杂。单线程执行任务的方式已经无法满足需求,通过多线程并行处理多个任务的方式已经成为可能。

目前,可以将一个项目的全部父任务和子任务分别交给不同的线程进行并行处理。然而,一个父任务可能会包含多个子任务,在执行任务过程中需要将父任务包含的全部子任务执行完毕之后才能执行该父任务,因此,可能会出现用于执行父任务的线程等待其他线程执行子任务的情况。可见,现有的多线程并行处理任务的方式的线程利用率较低,执行任务的速度较慢。



技术实现要素:

本发明的目的是提供一种任务执行方法及装置,用于提高执行任务的速度。

根据本发明实施例的第一方面,提供一种任务执行方法,包括:

在通过第一线程执行第一任务时,检测所述第一任务是否包括未执行的子任务;

若检测到所述第一任务包括未执行的子任务,则通过第二线程执行所述子任务;

释放所述第一线程占用的资源。

可选的,所述若检测到所述第一任务包括未执行的子任务,则通过第二线程执行所述子任务,包括:

若检测到所述第一任务包括N个未执行的子任务,则通过M个第二线程执行所述N个未执行的子任务,其中,M、N为正整数,且M≤N。

可选的,所述方法还包括:

通过所述第一线程记录所述第一任务的执行状态;其中,所述执行状态用于指示所述第一任务包括的子任务的执行进度。

可选的,所述方法还包括:

在所述执行状态表明所述第一任务包括的子任务均执行完成时,为所述第一任务重新分配线程,以执行所述第一任务未执行的部分。

可选的,在检测所述第一任务是否包括未执行的子任务之后,所述方法还包括:

若检测到所述第一任务未包括未执行的子任务,则通过所述第一线程继续执行所述第一任务,以完成所述第一任务。

根据本发明实施例的第二方面,提供一种任务执行装置,包括:

检测模块,用于在通过第一线程执行第一任务时,检测所述第一任务是否包括未执行的子任务;

第一执行模块,用于若检测到所述第一任务包括未执行的子任务,则通过第二线程执行所述子任务;

释放模块,用于释放所述第一线程占用的资源。

可选的,所述第一执行模块还包括:

第一执行子模块,用于若检测到所述第一任务包括N个未执行的子任务,则通过M个第二线程执行所述N个未执行的子任务,其中,M、N为正整数,且M≤N。

可选的,所述装置还包括:

记录模块,用于通过所述第一线程记录所述第一任务的执行状态,其中,所述执行状态用于指示所述第一任务包括的全部子任务的执行进度。

可选的,所述装置还包括:

分配模块,用于在所述执行状态表明所述第一任务包括的子任务均执行完成时,为所述第一任务重新分配线程,以执行所述第一任务未执行的部分。可选的,所述装置还包括:

第二执行模块,用于在检测所述第一任务是否包括未执行的子任务之后,若检测到所述第一任务未包括未执行的子任务,则通过所述第一线程继续执行所述第一任务,以完成所述第一任务。

通过上述技术方案,用于执行第一任务的第一线程如果检测到第一任务包括有未执行的子任务,那么可以通过第二线程执行未执行的子任务,然后便释放占用的资源,进而继续执行其他的任务。这样,在第一任务为父任务的情况下,用于执行第一任务的第一线程无需等待第一任务的子任务的执行,可以在释放资源后继续执行其他的任务。可见,上述技术方案中,线程的利用率较高,进而提升了执行任务的速度。

本发明的其他特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本发明的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明,但并不构成对本发明的限制。在附图中:

图1是根据一示例性实施例示出的一种任务执行方法的流程图。

图2是根据一示例性实施例示出的任务分布的示意图。

图3是根据一示例性实施例示出的一种任务执行装置的框图。

具体实施方式

以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。

图1是根据一示例性实施例示出的一种任务执行方法的流程图,如图1所示,该任务执行方法可以应用于计算机中,包括以下步骤。

步骤S11:在通过第一线程执行第一任务时,检测第一任务是否包括未执行的子任务。

步骤S12:若检测到第一任务包括未执行的子任务,则通过第二线程执行未执行的子任务。

步骤S13:释放第一线程占用的资源。

本发明实施例中,上述步骤均可以在线程池中执行,或者也可以通过其他方式执行,比如通过不限定线程数量的方式执行,等等,本发明实施例对此不作限定,以下将以在线程池中执行上述步骤为例进行说明。

在实际应用中,一个项目可能包含有多个任务,这多个任务中可能有些任务还包含有子任务,子任务下还可能包含下一级的子任务,等等。在这些任务中,可以将包含有子任务的任务称为这些子任务的父任务。本发明实施例中的第一任务可以是一个总的项目,也可以是项目下包括的任意父任务或者任意子任务,等等,本发明实施例对此不作限定。

第一线程例如可以是线程池中的任意线程,线程池在接收到第一任务后,可以将第一任务分配给第一线程执行。

第一线程执行第一任务时,可以检测第一任务是否包括未执行的子任务。例如可以是在第一线程刚开始执行第一任务时进行检测,比如,第一线程在接收到第一任务后便开始检测,检测到第一任务包括三个未执行的子任务;或者比如,第一线程在接收到第一任务后开始检测,检测到第一任务没有子任务,或者检测到第一任务包括的全部子任务均执行完成,等等。

在检测到第一任务包括有未执行的子任务的情况下,可以令第二线程执行未执行的子任务,第二线程可以是线程池中的一个线程或者也可以是线程池中的多个线程,本发明实施例对此不作限定。例如,检测到第一任务包括三个未执行的子任务,那么可以通过三个第二线程分别执行第一任务包括的三个子任务,等等。对于通过第二线程执行未执行的子任务的方式,本发明实施例同样不作限定。例如,当通过第一线程检测到第一任务包括有未执行的子任务时,第一线程可以创建一个事件,那么线程池基于该事件便可以为第一任务包括的未执行的子任务分配第二线程,等等。

可选的,若检测到第一任务包括N个未执行的子任务,那么可以通过M个第二线程执行N个未执行的子任务,其中,M、N为正整数,且M≤N。

本发明实施例中,由于线程池中所包含的线程数量是一定的,比如可能是预先设定好的,那么用于执行第一任务包含的未执行的子任务的线程数可能是有限的,因此可以在线程数量充足的情况下,为每一个未执行的子任务分配一个第二线程,此时M=N;而在线程数量不足的情况下,可以使用小于未执行的子任务数量的线程数来执行N个未执行的子任务。

例如,第一线程在执行第一任务时,检测到第一任务包括四个未执行的子任务(此时N=4),在线程数量充足的情况下,可以通过线程池中的四个第二线程并行执行未执行的子任务(此时M也等于4)。

或者例如,第一线程在执行第一任务时,检测到第一任务包括四个未执行的子任务(此时N=4),比如在当前可供分配的线程有三个(此时M=3),那么可以先通过三个第二线程并行执行其中的三个子任务,有线程执行完任务之后再去执行剩下的一个子任务。

通过以上的方式,可以在线程数量固定的情况下,最大效率地执行第一任务包括的未执行的子任务,同时由于线程数量固定,可以避免因线程过多造成的负荷大,进而导致计算机死机的情况。

对于第一线程而言,在执行第一任务过程中,如果检测到第一任务包含未执行的子任务,那么可以在生成用于指示第二线程执行未执行的子任务的事件后,直接释放资源并准备去执行除第一任务外的任务,也就是说,第一线程在释放资源后处于可分配的状态,线程池可以为第一线程池分配待执行的任务。此时,可以认为,第一任务被拆分为两个部分,后半部分需要子任务执行完之后才能继续执行,那么比如可以将第一任务的后半部分放到队列的后方,暂时不执行,也不占用线程。

通过这样的方式,不会因第一任务等待其子任务的执行而持续占用第一线程,线程的利用率较高,进而提高了执行任务的速度,同时,通过以上的方式并不需要在进行一个项目前获知项目的拓扑结构,也就是项目包含的全部父任务和子任务以及这些任务的执行顺序,直接运行项目就能够实现高效率地并行处理项目包含的任务,在提高执行效率的同时也简化了步骤,对于程序开发人员来说更为简单、方便。

可选的,还可以通过第一线程记录第一任务的执行状态,其中,执行状态用于指示执行第一任务包括的子任务的进度。

对于记录第一任务的执行状态的方式,本发明实施例不作限定,例如,可以通过计数器记录执行完成的子任务的数量,那么例如,用于执行子任务的线程会在子任务执行完毕之后生成指示任务完成的事件,每捕获到一个事件,计数器计数加1,当计数器所计的数值与子任务数量相等时,可以认为第一任务包括的子任务均执行完成。这样,可以较为准确地获知第一任务的子任务是否执行完成,以便能够进一步确定是否要执行第一任务为完成的部分。

可选的,还可以在执行状态表明第一任务包括的子任务均执行完成时,可以为所述第一任务重新分配线程,以执行所述第一任务未执行的部分。

也就是说,由于在第一任务包括的子任务执行完成后,便可以继续执行第一任务剩下的部分了,那么可以在执行状态表明子任务均执行完成时,为第一任务重新分配线程,进而执行第一任务剩下的未执行的部分。对于如何为第一任务重新分配线程,本发明实施例不作限定,例如,可以在第一任务包括的子任务均执行完成时,创建一个事件,线程池可以基于该事件为第一任务分配当前处于空闲状态的任意线程,以便能够完成第一任务。通过这样的方式,在子任务的执行过程中,作为父任务的第一任务并不会因等待子任务的执行而持续占用线程,只有在子任务执行完成后,再继续执行第一任务剩下的部分,提高了线程的利用率,也提高了任务执行的效率。

当然,有时可能会出现子任务执行有错,或者需要在第一任务中再添加用于实现新的功能的子任务的情况,因此,再线程池基于第一事件分配空闲线程执行第一任务未执行的部分时,仍然可以再次执行上述步骤S11~S13,也就是继续执行检测是否包括未执行的子任务等步骤。这样,可以进一步完善任务执行的过程,优化设计,执行任务时的容错能力较强。

可选的,在检测第一任务是否包括未执行的子任务之后,若检测到第一任务未包括未执行的子任务,那么可以通过第一线程继续执行第一任务,以完成第一任务。

检测到第一任务未包括未执行的子任务可能有两种情况:第一种,第一任务有可能是没有子任务的任务,比如第一任务有可能本身就是处于最基层的子任务;第二种,第一任务包含的子任务已经执行完成了。那么,无论是上述哪种情况,都可以直接通过第一线程继续执行第一任务,以完成第一任务。由于在第一任务不包括未执行的子任务的情况下,第一任务的执行不需要等待其他任务的执行,因此,可以继续执行第一任务。

以下将通过一个完整的实施例对本发明的技术方案进行举例说明。

请参见图2,在项目1下,有三个任务,分别是任务1、任务2、及任务3,任务1没有子任务,任务2有一个子任务,且该子任务还有两个下一级的子任务,任务3有两个子任务。第一任务可以是图2中包括项目1在内的任意一个任务。

项目1开始时,检测到项目1包含三个任务,那么可以通过三个线程并行执行任务1、任务2、及任务3,此时可以释放执行项目1的线程的资源,以便执行其他的任务。对于执行任务1的线程,由于任务1没有子任务,因此可以通过同一线程持续执行任务1,直到任务1完成;对于执行任务2的线程,在检测到任务2包含一个子任务,也就是任务2.1时,通过另一线程执行任务2.1,此时可以释放原执行任务2的线程的资源,以便执行其他的任务,同样,对于执行任务2.1的线程,在检测到任务2.1包含两个子任务时,通过两个线程分别执行任务2.1.1和任务2.1.2,之后便释放资源,以便继续执行其他任务;同理,对于执行任务3的线程,在检测到任务3包含两个子任务时,通过两个线程分别执行任务3.1和任务3.2,此时可以释放原执行任务3的线程的资源,以便执行其他的任务。

由于父任务除了包括子任务外可能还包括其他的部分,这些部分可能需要在子任务执行完毕之后再执行。那么当原执行任务2.1的线程检测到任务2.1.1和任务2.1.2均执行完成,那么可以通过线程池中的任意空闲的线程继续执行任务2.1未执行的除子任务外的其他部分;当原执行任务2的线程检测到任务2.1执行完成时,可以通过线程池中的任意空闲的线程继续执行任务2未执行的除子任务外的其他部分;当原执行任务3的线程检测到任务3.1和任务3.2均执行完成时,可以通过线程池中的任意空闲的线程继续执行任务3未执行的除子任务外的其他部分;项目1同样可能还包括除任务1、任务2和任务3以外的其他部分,那么当原执行项目1的线程检测到任务1、任务2、及任务3均执行完成时,可以通过线程池中的任意空闲的线程继续执行项目1未执行的除子任务外的其他部分。

请参见图3,基于同一发明构思,本发明实施例提供一种任务执行装置,该装置可以包括:

检测模块301,用于在通过第一线程执行第一任务时,检测第一任务是否包括未执行的子任务;

第一执行模块302,用于若检测到第一任务包括未执行的子任务,则通过第二线程执行子任务;

释放模块303,用于释放第一线程占用的资源。

可选的,第一执行模块302还可以包括:

第一执行子模块,用于若检测到第一任务包括N个未执行的子任务,则通过M个第二线程执行N个未执行的子任务,其中,M、N为正整数,且M≤N。

可选的,该装置还可以包括:

记录模块,用于通过第一线程记录第一任务的执行状态,其中,执行状态用于指示第一任务包括的全部子任务的执行进度。

可选的,该装置还可以包括:

分配模块,用于在执行状态表明第一任务包括的子任务均执行完成时,为所述第一任务重新分配线程,以执行所述第一任务未执行的部分。

可选的,该装置还可以包括:

第二执行模块,用于在检测第一任务是否包括未执行的子任务之后,若检测到第一任务未包括未执行的子任务,则通过第一线程继续执行第一任务,以完成第一任务。

本发明实施例中,用于执行第一任务的第一线程如果检测到第一任务包括有未执行的子任务,那么可以通过第二线程执行未执行的子任务,然后便释放占用的资源,进而继续执行其他的任务。这样,在第一任务为父任务的情况下,用于执行第一任务的第一线程无需等待第一任务的子任务的执行,可以在释放资源后继续执行其他的任务,可见,上述技术方案中,线程的利用率较高,进而提升了执行任务的速度。

在本发明所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。

在本申请各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以对本发明的技术方案进行了详细介绍,但以上实施例的说明只是用于帮助理解本发明的方法及其核心思想,不应理解为对本发明的限制。本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1