任务执行方法、装置及计算机可读存储介质与流程

文档序号:12905959阅读:219来源:国知局
任务执行方法、装置及计算机可读存储介质与流程

本发明涉及计算机技术领域,特别涉及一种任务执行方法、装置及计算机可读存储介质。



背景技术:

随着计算机技术的发展,计算机待执行的目标任务可能同时包括多个相互之间存在依赖关系的子任务,此时,如何执行该目标任务成为计算机编程人员需考虑的问题。

相关技术中,预先在计算机中创建多个用于执行任务的线程,当需执行目标任务时,从该多个线程中预先为该目标任务确定一个线程,并通过确定的线程执行该目标任务,也即,通过确定的线程执行该目标任务包括的多个子任务。

在上述通过确定的线程执行该目标任务时,由于该目标任务包括的多个子任务均由该确定的线程执行,导致执行该目标任务时所需的时间较长,影响计算机执行该目标任务的效率。



技术实现要素:

为了解决相关技术通过确定线程执行目标任务时所需时间较长的问题,本发明实施例提供了一种任务执行方法、装置及计算机可读存储介质。所述技术方案如下:

第一方面,提供了一种任务执行方法,所述方法包括:

对于待执行的目标任务中的每个子任务,当确定所述子任务执行结束时,将所述子任务作为父任务,并生成所述父任务的子任务;

其中,每个子任务中包括对应的标识符,所述标识符用于指示对应的子任务是否为并发任务;

当基于所述父任务中的子任务的标识符确定所述父任务的子任务为并发任务时,将所述父任务的子任务添加至并发线程池中,由所述并发线程中的线程执行所述父任务的子任务,所述并发线程池包括至少两个线程,所述并发线程池中的线程用于并发执行任务。

可选地,所述生成所述父任务的子任务之后,还包括:

当基于所述父任务中的子任务的标识符确定所述父任务的子任务不是并发任务时,将所述父任务的子任务添加至串行线程中,由所述串行线程执行所述父任务的子任务,所述串行线程用于按照顺序执行任务。

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

分解所述目标任务,得到所述目标任务包括的所有子任务;

确定所述目标任务中的每个子任务的执行顺序;

根据所述目标任务中每个子任务的执行顺序,确定所述目标任务的任务树,所述任务树中根节点对应的子任务为最先执行的子任务;

确定所述目标任务的任务树中的根节点对应的子任务,并将所述根节点对应的子任务作为最先执行的子任务。

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

当执行所述根节点对应的子任务时,将所述根节点对应的子任务添加至所述并发线程池中,由所述并发线程池中的线程执行所述根节点对应的子任务。

第二方面,提供了一种任务执行装置,所述装置包括:

生成模块,用于对于待执行的目标任务中的每个子任务,当确定所述子任务执行结束时,将所述子任务作为父任务,并生成所述父任务的子任务;

其中,每个子任务中包括对应的标识符,所述标识符用于指示对应的子任务是否为并发任务;

第一添加模块,用于当基于所述父任务中的子任务的标识符确定所述父任务的子任务为并发任务时,将所述父任务的子任务添加至并发线程池中,由所述并发线程中的线程执行所述父任务的子任务,所述并发线程池包括至少两个线程,所述并发线程池中的线程用于并发执行任务。

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

第二添加模块,用于当基于所述父任务中的子任务的标识符确定所述父任务的子任务不是并发任务时,将所述父任务的子任务添加至串行线程中,由所述串行线程执行所述父任务的子任务,所述串行线程用于按照顺序执行任务。

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

分解模块,用于分解所述目标任务,得到所述目标任务包括的所有子任务;

第一确定模块,用于确定所述目标任务中的每个子任务的执行顺序;

第二确定模块,用于根据所述目标任务中每个子任务的执行顺序,确定所述目标任务的任务树,所述任务树中根节点对应的子任务为最先执行的子任务;

第三确定模块,用于确定所述目标任务的任务树中的根节点对应的子任务,并将所述根节点对应的子任务作为最先执行的子任务。

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

第三添加模块,用于当执行所述根节点对应的子任务时,将所述根节点对应的子任务添加至所述并发线程池中,由所述并发线程池中的线程执行所述根节点对应的子任务。

第三方面,提供一种任务执行装置,所述任务执行装置包括处理器、通信接口、存储器和通信总线;

所述处理器,所述通信接口和所述存储器通过所述通信总线完成相互间的通信;

所述存储器用于存放计算机程序;

所述处理器用于执行存储器上所存放的程序,以实现上述第一方面所述的任务执行方法。

第四方面,提供一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的任务执行方法。

本发明实施例提供的技术方案带来的有益效果是:

在本发明实施例中,当基于父任务中的子任务的标识符确定该父任务的子任务为并发任务,将该父任务的子任务添加至并发线程池中,由并发线程中的线程执行所述父任务的子任务。由于并发线程池包括至少两个线程,且并发线程池中的线程用于并发执行任务,也即,在本发明实施例中,存在至少两个线程来执行目标任务中的子任务,避免由单一的线程来执行目标任务的包括的所有子任务,从而可以缩短计算机执行目标任务所需的时间,提高了计算机执行目标任务的效率。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种目标任务示意图;

图2是本发明实施例提供的一种任务执行方法流程图;

图3a是本发明实施例提供的另一种任务执行方法流程图;

图3b是本发明实施例提供的一种任务树示意图;

图3c是本发明实施例提供的一种线程示意图;

图4a是本发明实施例提供的一种任务执行装置框图;

图4b是本发明实施例提供的另一种任务执行装置框图;

图5是本发明实施例提供的另一种任务执行装置框图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

为了后续便于说明,在对本发明实施例提供的任务执行方法进行详细说明之前,先对本发明实施例涉及的名词进行介绍

任务:是指计算机完成的一个活动,也即计算机通过一系列操作达到某一目的。例如,计算机在执行“读取数据并将数据放入内存中”的操作时,该“读取数据并将数据放入内存中”即为一个任务。

线程:当计算机执行一个程序时,系统就创建一个进程,并为该进程分配资源,比如内存空间以及磁盘空间等。而线程则是进程在执行运算时的最小单位,也即,当进程包括多个子任务时,实际上是由进程中包括的线程来执行该各个子任务。

并发任务:对于一个定时任务,当该定时任务的执行时间到达时,立即执行该定时任务,无论当前是否有其他任务正在执行,此时,该定时任务称为并发任务。

串行任务:对于一个定时任务,当该定时任务的执行时间到达时,需等待当前正在执行的任务执行完毕时,才能执行该定时任务,此时该定时任务称为串行任务。

并发线程:用于执行并发任务的线程。

串行线程:用于执行串行任务的线程。

接下来,对本发明实施例的应用场景进行介绍,随着计算机技术的发展,计算机待执行的目标任务可能同时包括多个相互之间存在依赖关系的子任务。例如,图1为本发明实施例提供的一种同时包括多个子任务的目标任务100的示意图。如图1所示,该目标任务100包括五个子任务,子任务1、子任务11、子任务12、子任务111和子任务112。其中,子任务11和子任务12的执行依赖于子任务1的执行,子任务111和子任务112的执行依赖于子任务11的执行,也即,子任务11和子任务12需在子任务1执行完之后才能执行,子任务111和子任务112需在子任务11执行完之后才能执行。而本发明实施例提供的任务执行方法就应用于执行同时包括多个相互之间存在依赖关系的子任务的目标任务的场景。

图2为本发明实施例提供的一种任务执行方法流程图,该任务执行方法应用于需执行目标任务的终端或服务器中,如图2所示,该任务执行方法包括以下步骤:

步骤201:对于待执行的目标任务中的每个子任务,当确定该子任务执行结束时,将该子任务作为父任务,并生成该父任务的子任务;其中,每个子任务中包括对应的标识符,该标识符用于指示对应的子任务是否为并发任务。

步骤202:当基于该父任务中的子任务的标识符确定该父任务的子任务为并发任务时,将该父任务的子任务添加至并发线程池中,由该并发线程中的线程执行该父任务的子任务,该并发线程池包括至少两个线程,该并发线程池中的线程用于并发执行任务。

在本发明实施例中,当基于父任务中的子任务的标识符确定该父任务的子任务为并发任务,将该父任务的子任务添加至并发线程池中,由并发线程中的线程执行该父任务的子任务。由于并发线程池包括至少两个线程,且并发线程池中的线程用于并发执行任务,也即,在本发明实施例中,存在至少两个线程来执行目标任务中的子任务,避免由单一的线程来执行目标任务的包括的所有子任务,从而可以缩短计算机执行该目标任务所需的时间,提高了计算机执行目标任务的效率。

可选地,生成该父任务的子任务之后,还包括:

当基于该父任务中的子任务的标识符确定该父任务的子任务不是并发任务时,将该父任务的子任务添加至串行线程中,由该串行线程执行该父任务的子任务,该串行线程用于按照顺序执行任务。

可选地,该方法还包括:

分解该目标任务,得到该目标任务包括的所有子任务;

确定该目标任务中的每个子任务的执行顺序;

根据该目标任务中每个子任务的执行顺序,确定该目标任务的任务树,该任务树中根节点对应的子任务为最先执行的子任务;

确定该目标任务的任务树中的根节点对应的子任务,并将该根节点对应的子任务作为最先执行的子任务。

可选地,该方法还包括:

当执行该根节点对应的子任务时,将该根节点对应的子任务添加至并发线程池中,由并发线程池中的线程执行该根节点对应的子任务。

上述所有可选技术方案,均可按照任意结合形成本发明的可选实施例,本发明实施例对此不再一一赘述。

图3a为本发明实施例提供的另一种任务执行方法流程图,该任务执行方法应用于需执行目标任务的终端或服务器中,如图3a所示,该任务执行方法包括以下步骤:

步骤301:确定目标任务的任务树,并将根节点对应的子任务作为最先执行的子任务。

在本发明实施例中,由于目标任务包括多个相互之间存在依赖关系的子任务,因此,在执行目标任务时,需先确定最先需要执行的子任务。而在本发明实施例中,确定最先需要执行的子任务是通过目标任务的任务树来确定的,因此,在执行目标任务之前,需先确定目标任务的任务树。

具体地,确定目标任务的任务树的实现过程可以为:分解该目标任务,得到该目标任务包括的所有子任务,确定该目标任务中的每个子任务的执行顺序,根据该目标任务中每个子任务的执行顺序,确定该目标任务的任务树,该任务树中根节点对应的子任务为最先执行的子任务。

其中,确定该目标任务中的每个子任务的执行顺序,也即,对于每个子任务,确定在该子任务执行前必须执行的子任务以及在该子任务执行完成后才可执行的子任务。

另外,任务树用于指示目标任务包括的各个子任务之间的依赖关系。任务树包括多个节点,每个节点对应一个子任务,并且对于每个节点,当该节点存在子节点时,该子节点对应的子任务需在该节点对应的子任务执行完之后才能执行。

例如,对于图1所示的目标任务,分解该目标任务,得到5个子任务,子任务1、子任务11、子任务12、子任务111和子任务112。对于这五个子任务中的每个子任务,确定该子任务的执行顺序。也即,确定子任务11、子任务12、子任务111和子任务112必须在子任务1执行完之后才能执行,子任务111和子任务112必须在子任务11执行完之后才能执行。此时,可以根据该每个子任务的执行顺序,确定如图3b所示的目标任务的任务树。如图3b所示,该目标任务的任务树包括一个根节点和四个叶节点。其中,根节点对应的子任务为子任务1,根节点有两个叶节点,该两个叶节点对应的子任务分别为子任务11和子任务12,子任务11对应的叶节点也有两个叶节点,该两个叶节点对应的子任务分别为子任务111和子任务112。

在确定出目标任务的任务树之后,确定该目标任务的任务树中的根节点对应的子任务,并将该根节点对应的子任务作为最先执行的子任务。例如,对于图3b所示的目标任务的任务树,由于根节点对应的子任务为子任务1,因此,将子任务1作为最先执行的子任务。

具体地,执行该根节点对应的子任务的具体实现过程可以为:当执行该根节点对应的子任务时,将该根节点对应的子任务添加至该并发线程池中,由该并发线程池中的线程执行该根节点对应的子任务。

由于该并发线程池中包括至少两个线程,为了提高执行该根节点对应的子任务的效率,可以将根节点对应的子任务添加至并发线程池中,由并发线程池中的线程执行该根节点对应的子任务。当然,在本发明实施例中,由于并不存在与根节点对应的子任务冲突的子任务,因此,也可以将根节点对应的子任务添加至串行线程中,由串行线程来执行该根节点对应的子任务。

在执行完根节点对应的子任务时,对于该目标任务中包括的其他子任务,其执行过程基本相同,也即可以通过下述步骤302至步骤304执行该目标任务包括的其他子任务。

步骤302:对于待执行的目标任务中的每个子任务,当确定该子任务执行结束时,将该子任务作为父任务,并生成该父任务的子任务。

具体地,当确定根节点对应的子任务执行结束时,将该根节点对应的子任务作为父任务,并将执行该根节点对应的子任务结束时生成的任务确定该父任务的子任务,也即生成该父任务的子任务。

对于该父任务的子任务,按照下述步骤303和步骤304执行该父任务的子任务,当确定该父任务的子任务执行结束时,重新将该父任务的子任务作为下一个父任务,并生成该下一个父任务的子任务,同样按照下述步骤303和步骤304执行该下一个父任务的子任务,重复执行上述过程,直至确定该目标任务包括的所有子任务执行完毕。

其中,每个子任务中包括对应的标识符,该标识符用于指示对应的子任务是否为并发任务。也即,当生成该父任务的子任务时,该子任务中包括对应的标识符。需要说明的是,该标识符为程序员在编写任务时为该任务设置的一种代码,该代码用于指示该任务是否为并发任务。

步骤303:当基于该父任务中的子任务的标识符确定该父任务的子任务为并发任务时,将该父任务的子任务添加至并发线程池中,由该并发线程中的线程执行该父任务的子任务,该并发线程池包括至少两个线程,该并发线程池中的线程用于并发执行任务。

其中,预先为并发线程池中设置有第一任务列表,该第一任务列表用于缓存添加至并发线程池中的任务。此时,将该父任务的子任务添加至并发线程池中,也即,将该父任务该父任务的子任务添加至并发线程池的第一任务列表中。

对于并发线程池包括的至少两个线程中的每个线程,当该线程当前处于闲置状态时,该线程将从第一任务列表中拉取一个任务并执行,直至将第一任务列表中的任务全部执行完毕。

例如,图3c为本发明实施例提供的一种线程示意图。也即,在本发明实施例中,用于执行任务的线程包括并发线程池中的线程和串行线程,其中,该并发线程池包括3个线程,线程1、线程2和线程3。当确定该父任务的子任务为并发任务时,将该父任务的子任务添加至并发线程池中的第一任务列表,由该并发线程池中处于闲置状态的线程执行该父任务的子任务。

步骤304:当基于该父任务中的子任务的标识符确定该父任务的子任务不是并发任务时,将该父任务的子任务添加至串行线程中,由该串行线程执行该父任务的子任务,该串行线程用于按照顺序执行任务。

由于串行线程必须按照顺序执行任务,因此,对于该串行线程同样预先设置有第二任务列表,该第二任务列表用于缓存添加至串行线程中的任务。此时,当确定该父任务的子任务不是并发任务时,将该父任务的子任务添加至第二任务列表,等待串行线程执行。也即,串行线程在将排在该父任务的子任务之前的任务执行完毕后,执行该父任务的子任务。

例如,对于图3b所示的目标任务,将目标任务的子任务1添加至图3c所示的并发线程池中,由并发线程池中包括的线程执行子任务1,在子任务1结束时,生成子任务11和子任务12。对于子任务11,通过该子任务11对应的标识符判断该子任务11是否为并发任务,如果该子任务11为并发任务,则将该子任务11添加至图3c所示的并发线程池中,如果该子任务11不是并发任务,则将该子任务11添加至图3c所示的串行线程中。当子任务11执行结束时,生成子任务111和子任务112,按照执行子任务11的方法执行子任务111和子任务112。另外,按照执行子任务11的方法执行子任务12,在子任务12执行结束时,没有生成相应地子任务。当子任务111和子任务112执行结束时,也没有生成相应地子任务,此时,确定该目标任务包括的所有子任务执行完毕。

在本发明实施例中,当基于父任务中的子任务的标识符确定该父任务的子任务为并发任务,将该父任务的子任务添加至并发线程池中,由并发线程中的线程执行该父任务的子任务,当基于父任务中的子任务的标识符确定该父任务的子任务不是并发任务时,将该父任务的子任务添加至串行线程池中,由串行线程执行该父任务的子任务。也即,在本发明实施例中,用于执行目标任务的线程包括并发线程池包括至少两个线程和串行线程,避免由单一的线程来执行目标任务的包括的所有子任务,从而可以缩短计算机执行该目标任务所需的时间,提高了计算机执行目标任务的效率。

本发明实施例除了提供上述图2和图3a所示的任务执行方法,还提供了一种任务执行装置,参见图4a,该任务执行装置400包括生成模块401和第一添加模块402:

生成模块401,用于对于待执行的目标任务中的每个子任务,当确定该子任务执行结束时,将该子任务作为父任务,并生成该父任务的子任务;

其中,每个子任务中包括对应的标识符,该标识符用于指示对应的子任务是否为并发任务;

第一添加模块402,用于当基于该父任务中的子任务的标识符确定该父任务的子任务为并发任务时,将该父任务的子任务添加至并发线程池中,由该并发线程中的线程执行该父任务的子任务,该并发线程池包括至少两个线程,该并发线程池中的线程用于并发执行任务。

可选地,参见图4b,该装置400还包括第二添加模块403:

第二添加模块403,用于当基于该父任务中的子任务的标识符确定该父任务的子任务不是并发任务时,将该父任务的子任务添加至串行线程中,由该串行线程执行该父任务的子任务,该串行线程用于按照顺序执行任务。

可选地,该装置400还包括:

分解模块,用于分解该目标任务,得到该目标任务包括的所有子任务;

第一确定模块,用于确定该目标任务中的每个子任务的执行顺序;

第二确定模块,用于根据该目标任务中每个子任务的执行顺序,确定该目标任务的任务树,该任务树中根节点对应的子任务为最先执行的子任务;

第三确定模块,用于确定该目标任务的任务树中的根节点对应的子任务,并将该根节点对应的子任务作为最先执行的子任务。

可选地,该装置400还包括:

第三添加模块,用于当执行该根节点对应的子任务时,将该根节点对应的子任务添加至该并发线程池中,由该并发线程池中的线程执行该根节点对应的子任务。

在本发明实施例中,当基于父任务中的子任务的标识符确定该父任务的子任务为并发任务,将该父任务的子任务添加至并发线程池中,由并发线程中的线程执行该父任务的子任务,当基于父任务中的子任务的标识符确定该父任务的子任务不是并发任务时,将该父任务的子任务添加至串行线程池中,由串行线程执行该父任务的子任务。也即,在本发明实施例中,用于执行目标任务的线程包括并发线程池包括至少两个线程和串行线程,避免由单一的线程来执行目标任务的包括的所有子任务,从而可以缩短计算机执行该目标任务所需的时间,提高了计算机执行目标任务的效率。

需要说明的是:上述实施例提供的任务执行装置在执行任务时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的任务执行装置与任务执行方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

图5是本发明实施例提供的另一种任务执行装置500的框图。例如,装置500可以被提供为一服务器或一终端。参照图5,装置500包括处理器501、通信接口502、存储器503和通信总线504。

如图5所示,处理器501,通信接口502和存储器503通过通信总线504完成相互间的通信。

处理器501可以是一个cpu(centralprocessingunit,中央处理器),微处理器,asic(application-specificintegratedcircuit,特定应用集成电路),或一个或多个用于控制本申请方案程序执行的集成电路。

通信总线504可包括一通路,在上述组件之间传送信息。

存储器503可以是rom(read-onlymemory,只读存储器)或可存储静态信息和指令的其它类型的静态存储设备,ram(randomaccessmemory,随机存取存储器)或者可存储信息和指令的其它类型的动态存储设备,也可以是eeprom(electricallyerasableprogrammableread-onlymemory,电可擦可编程只读存储器)、cd-rom(compactdiscread-onlymemory,只读光盘)或其它光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其它磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质,但不限于此。存储器503可以是独立存在,通过通信总线504与处理器501相连接。存储器503也可以和处理器501集成在一起。

通信接口502,使用任何收发器一类的装置,用于与其它设备或通信网络通信,如以太网,无线接入网,wlan(wirelesslocalareanetworks,无线局域网)等。

其中,存储器503用于存储执行本申请方案的计算机程序,并由处理器501来控制执行。也即,处理器501用于执行存储器上所存放的程序,以实现图2和图3a所示实施例提供的任务执行方法。

在示例性实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,当该计算机可读存储介质中存储的计算机程序由服务器的处理器执行时,使得服务器能够执行图2和图3a所示实施例提供的任务执行方法。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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