掌桥专利:专业的专利平台
掌桥专利
首页

一种调度任务的方法、装置及存储介质

文献发布时间:2023-06-19 12:14:58


一种调度任务的方法、装置及存储介质

技术领域

本申请涉及计算机技术,特别涉及一种调度任务的方法、装置及存储介质。

背景技术

在移动端开发中,线程被分为两种,一种是主线程,另一种是其他线程,通常,上述其他线程统称为子线程。运行过程中,主线程的优先级比较高,即主线程能够获得的中央处理器(Central Processing Unit,CPU)的执行机会较多;而且,主线程可以更新用户界面(User Interface,UI),子线程却无法更新UI。因此,参阅图1所示,常常通过一个线程依次执行各个任务的方法来完成任务的执行,显然,该方法耗时较长,执行效率较差。

目前,在执行大量任务时,也可以使用线程池技术,但是,线程池的弊端在于,无法处理彼此有依赖关系的任务(这里的任务的依赖关系是指任务N的执行依赖于任务N-1,必须等待任务N-1运行完,才能执行任务N),也无法处理必须要运行在主线程上的任务。显然,把所有的任务都丢到线程池中,直接使用线程池来完成,无法满足某些任务必须在特定线程运行的需求,例如,主线程;另外,线程池也不能处理有依赖关系的任务。

当然,也可以在多线程中用加锁的方式来处理大量的任务,例如,两个线程来执行同一个任务时,加锁可以保证每次只有一个线程能获取到该任务。这样,在启动多个线程后,多个线程竞争一把锁,取得锁的线程从任务列表中获取一个任务去执行,待任务执行完毕释放锁,其他空闲的线程继续争夺锁,取得锁的线程再从任务列表中获取一个任务去执行,以此类推,直到全部任务都执行完毕。但是,使用加锁的方式必然会影响运行效率,因为多线程需要竞争来获取待执行的任务,如果没有取得锁,则无法访问任务列表,也无法取得下一个待执行的任务,上述过程无法做到任务均衡调度。

发明内容

本公开实施例提供一种调度任务的方法、装置及存储介质,用以在提升目标任务执行效率的同时使线程之间的任务调度更加均衡。

本公开提供的具体技术方案如下:

第一方面,一种调度任务的方法,包括:

基于目标任务之间的依赖关系,创建第一任务队列和第二任务队列,其中,第一任务队列用于存放在主线程运行的多个目标任务,第二任务队列用于存放在主线程之外运行的多个目标任务;

创建主线程以及基于主线程创建至少一个子线程;

通过主线程依次获取并执行第一任务队列中的各个目标任务,以及,通过至少一个子线程分别获取并执行第二任务队列中的各个目标任务。

可选地,基于目标任务之间的依赖关系,创建第一任务队列和第二任务队列,包括:

按照多个目标任务的依赖关系的先后顺序,将多个目标任务进行排序;

创建第一任务队列和第二任务队列;

依次获取多个目标任务,其中,针对获取的每一个目标任务,执行以下操作:

判断当前获取的一个目标任务,是否为在主线程运行的目标任务;

若是,基于排序结果,将目标任务放入第一任务队列;

否则,基于排序结果,将目标任务放入第二任务队列。

可选地,通过主线程依次获取并执行第一任务队列中的各个目标任务,以及,通过至少一个子线程分别获取并执行第二任务队列中的各个目标任务,包括:

在主线程获取第一任务队列中的第一个目标任务时,通过至少一个子线程分别获取第二任务队列的目标任务。

可选地,通过至少一个子线程分别获取并执行第二任务队列中的各个目标任务之前,还包括:

为第二任务队列设置一个标志位,标志位表示第二任务队列中已被获取的目标任务的总数目。

可选地,还包括:

若确定第一任务队列已为空,而第二任务队列不为空,则通过主线程从第二任务队列,获取并执行剩余的目标任务。

可选地,通过至少一个子线程分别获取并执行第二任务队列中的各个目标任务,包括:

当第二任务队列中的一个目标任务被至少一个子线程中的任意一个子线程获取后,将标志位的赋值加一,以使至少一个子线程中的其他任一个子线程获取并执行第二任务队列中的下一个待执行的目标任务。

可选地,若确定第一任务队列已为空,而第二任务队列不为空之后,还包括:

当第二任务队列中的一个目标任务被至少一个子线程中的任意一个子线程获取后,将标志位的赋值加一,以使主线程或者至少一个子线程中的其他任一个子线程获取并执行第二任务队列中的下一个待执行的目标任务。

可选地,若确定第一任务队列已为空,而第二任务队列不为空之后,还包括:

若第二任务队列中的同一个目标任务被两个线程同时获取,则判断标志位的赋值与第二任务队列中被获取到的任务总数是否一致;

若是,通过两个线程中的一个线程执行第二任务队列中的当前待执行的目标任务;

否则,将赋值加一,并通过两个线程中的一个线程获取第二任务队列中的下一个待执行的目标任务。

可选地,两个线程包括主线程和一个子线程,或者,包括两个子线程。

第二方面,一种调度任务的装置,包括:

队列创建单元,用于基于目标任务之间的依赖关系,创建第一任务队列和第二任务队列,其中,第一任务队列用于存放在主线程运行的多个目标任务,第二任务队列用于存放在主线程之外运行的多个目标任务;

线程创建单元,用于创建主线程以及基于主线程创建至少一个子线程;

执行单元,用于通过主线程依次获取并执行第一任务队列中的各个目标任务,以及,通过至少一个子线程中的每个子线程分别获取并执行第二任务队列中的各个目标任务。

可选地,基于目标任务之间的依赖关系,创建第一任务队列和第二任务队列,队列创建单元用于:

按照多个目标任务的依赖关系的先后顺序,将多个目标任务进行排序;

创建第一任务队列和第二任务队列;

依次获取多个目标任务,其中,针对获取的每一个目标任务,执行以下操作:

判断当前获取的一个目标任务,是否为在主线程运行的目标任务;

若是,基于排序结果,将目标任务放入第一任务队列;

否则,基于排序结果,将目标任务放入第二任务队列。

可选地,通过主线程依次获取并执行第一任务队列中的各个目标任务,以及,通过至少一个子线程中的每个子线程分别获取并执行第二任务队列中的各个目标任务,执行单元用于:

在主线程获取第一任务队列中的第一个目标任务时,通过至少一个子线程分别获取第二任务队列的目标任务。

可选地,还包括:

为第二任务队列设置一个标志位,标志位表示第二任务队列中已被获取的目标任务的总数目。

可选地,还包括:

若确定第一任务队列已为空,而第二任务队列不为空,则通过主线程从第二任务队列,获取并执行剩余的目标任务。

可选地,通过至少一个子线程分别获取并执行第二任务队列中的各个目标任务,执行单元用于:

当第二任务队列中的一个目标任务被至少一个子线程中的任意一个子线程获取后,将标志位的赋值加一,以使至少一个子线程中的其他任一个子线程获取并执行第二任务队列中的下一个待执行的目标任务。

可选地,若确定第一任务队列已为空,而第二任务队列不为空之后,执行单元用于还用于:

当第二任务队列中的一个目标任务被至少一个子线程中的任意一个子线程获取后,将标志位的赋值加一,以使主线程或者至少一个子线程中的其他任一个子线程获取并执行第二任务队列中的下一个待执行的目标任务。

可选地,若确定第一任务队列已为空,而第二任务队列不为空之后,执行单元用于还用于:

若第二任务队列中的同一个目标任务被两个线程同时获取,则判断标志位的赋值与第二任务队列中被获取到的任务总数是否一致;

若是,通过两个线程中的一个线程执行第二任务队列中的当前待执行的目标任务;

否则,将赋值加一,并通过两个线程中的一个线程获取第二任务队列中的下一个待执行的目标任务。

可选地,两个线程包括主线程和一个子线程,或者,包括两个子线程。

第三方面,一种智能终端,包括:

存储器,用于存储可执行指令;

处理器,用于读取并执行存储器中存储的可执行指令,以实现如第一方面任一项的方法。

第四方面,一种计算机可读存储介质,当所述存储介质中的指令由处理器执行时,使得所述处理器能够执行上述第一方面任一项所述的方法。

第五方面,一种计算机程序产品,包含可执行指令,当所述计算机程序产品的可执行指令由处理器执行时,能够实现如上述第一方面任一项所述的方法。

综上所述,本公开实施例中,智能终端基于目标任务之间的依赖关系,创建第一任务队列和第二任务队列,用以分别存放在主线程运行的多个目标任务和在主线程之外运行的多个目标任务,从而解决了目标任务必须在指定线程运行的要求;并且,智能终端创建主线程以及基于主线程创建至少一个子线程,这样在实施过程中,智能终端通过主线程依次获取并执行第一任务队列中的各个目标任务,以及,通过至少一个子线程中的每个子线程分别获取并执行第二任务队列中的各个目标任务,由于上述第一任务队列和第二任务队列是基于目标任务之间的依赖关系创建的,这样,在处理有依赖关系的目标任务的前提下,能够保证目标任务的均衡调度,从而能够在通过主线程运行目标任务的同时,也可以通过上述至少一个子线程运行其他目标任务,实现了主线程与多个子线程的并行执行,达到了各个线程都能均衡运行的目的,进一步提升了目标任务的执行效率,进而使得目标任务在线程之间的调度更加均衡。

附图说明

图1为现有技术中智能终端执行任务的示意图;

图2为本申请实施例中智能终端调度任务的流程示意图;

图3为本申请实施例中智能终端创建任务队列的流程示意图;

图4为本申请实施例中智能终端通过多个线程执行目标任务的示意图;

图5为本申请实施例智能终端通过两个线程获取同一个目标任务的流程示意图;

图6为本申请实施例应用场景1中智能终端通过主线程1、子线程1和子线程2执行目标任务的示意图;

图7为本申请实施例应用场景1中各个目标任务之间的有向无环图;

图8为本公开实施例中智能终端的逻辑架构示意图;

图9为本公开实施例中智能终端的实体架构示意图。

具体实施方式

为了提升目标任务的执行效率,并使得目标任务在线程之间的调度更加均衡,本申请实施例中,智能终端基于目标任务之间的依赖关系,创建第一任务队列和第二任务队列,其中,第一任务队列用于存放在主线程运行的多个目标任务,第二任务队列用于存放在主线程之外运行的多个目标任务,在执行过程中,智能终端创建主线程以及基于主线程创建至少一个子线程,智能终端通过主线程依次获取并执行第一任务队列中的各个目标任务,以及,通过至少一个子线程中的每个子线程分别获取并执行第二任务队列中的各个目标任务,这样,在主线程运行目标任务的同时,上述至少一个子线程也在运行另一批目标任务,实现了主线程与至少一个子线程的并行执行,从而实现了各个目标任务在主线程与至少一个子线程中的均衡调度。

下面结合附图对本申请优选的实施方式进行详细说明。本公开实施例中,调度任务的方法的实现,主要在智能终端侧执行,参阅图2所示,本公开实施例中,智能终端调度任务的具体流程如下:

步骤200:智能终端基于目标任务之间的依赖关系,创建第一任务队列和第二任务队列,其中,第一任务队列用于存放在主线程运行的多个目标任务,第二任务队列用于存放在主线程之外运行的多个目标任务。

由于运行过程中,有些目标任务必须在主线程执行,例如,用于更新UI的目标任务等。因此,为了提高运行效率,智能终端需要将目标任务进行分类存放,具体参阅图3所示,上述分类存放的流程包括以下步骤:

步骤2000:智能终端按照多个目标任务的依赖关系的先后顺序,将多个目标任务进行排序。

考虑到目标任务之间的依赖关系,即目标任务N的执行依赖于目标任务N-1,因此,运行过程中,智能终端必须等待目标任务N-1运行完,才能执行目标任务N。

实施过程中,智能终端为各个目标任务进行排序,将在运行过程中被依赖顺序在先的目标任务排在前,将被依赖顺序在后的目标任务排在后,以上述目标任务N和目标任务N-1来进行说明,即将上述目标任务N-1排在前,将上述目标任务N排在后。

待智能终端对待执行的多个目标任务都进行排序后,得到已按照依赖关系由先到后的顺序排列的各个目标任务。

步骤2001:智能终端创建第一任务队列和第二任务队列。

在对多个目标任务都进行排序后,智能终端创建用于放置排序后的各个目标任务的第一任务队列和第二任务队列。需要进行说明的是,智能终端创建的第一任务队列和第二任务队列的初始状态都为空。

创建上述两个队列的目的是要用于将目标任务进行分类存放,具体的,第一任务队列用于存放在主线程运行的多个目标任务,第二任务队列用于存放在主线程之外运行的多个目标任务。

上述第一任务队列和第二任务队列是基于目标任务之间的依赖关系创建的,这样,在处理有依赖关系的目标任务的前提下,能够保证目标任务的均衡调度。

步骤2002:为了将各个目标任务准确放置到相对应的第一任务队列或者第二任务队列中,智能终端依次获取多个目标任务,其中,针对获取的每一个目标任务,执行以下操作:智能终端判断当前获取的一个目标任务,是否为在主线程运行的目标任务,若是,则执行步骤2003,否则,执行步骤2004。

通过智能终端判断目标任务是否为在主线程运行的目标任务的步骤,可以有效筛选出必须在主线程执行的目标任务,而对于不是必须在主线程执行的目标任务,可由子线程执行,从而解决了目标任务必须在指定线程运行的要求。

考虑到主线程是程序开始时就执行的,是产生其他子线程的线程;并且,主线程通常最后完成执行(例如,各种关闭动作等),因此,在实施过程中,智能终端在获取到当前的一个目标任务后,即判断该目标线程是否为在主线程运行的目标任务,从而将必须在主线程运行的目标任务筛选出来。

步骤2003:智能终端基于排序结果,将目标任务放入第一任务队列。

实施过程中,当智能终端判断出目标任务为在主线程运行的目标任务时,即该目标任务为必须在主线程运行的目标任务,智能终端将该目标任务放入第一任务队列。

需要说明的是,将目标任务按照依赖关系的先后进行排序后的排序结果依次放入到第一任务队列中,这样,得到的第一任务队列中的各个目标任务也是按照依赖关系由先到后的顺序进行排列的,以上述目标任务N和目标任务N-1都放入到第一任务队列来进行说明,即将上述目标任务N-1排在前,将上述目标任务N排在后。

步骤2004:智能终端基于排序结果,将目标任务放入第二任务队列。

实施过程中,当智能终端判断出目标任务不是在主线程运行的目标任务时,即该目标任务为不是必须在主线程运行的目标任务,智能终端将该目标任务放入第二任务队列。

需要说明的是,将目标任务按照依赖关系的先后进行排序后的排序结果依次放入到第二任务队列中,这样,得到的第二任务队列中的各个目标任务也是按照依赖关系由先到后的顺序进行排列的,以上述目标任务N和目标任务N-1都放入到第二任务队列来进行说明,即将上述目标任务N-1排在前,将上述目标任务N排在后。

步骤201:智能终端创建主线程以及基于主线程创建至少一个子线程。

实施过程中,智能终端创建一个主线程。那么,为了使主线程能够去第一任务队列中获取待执行的目标任务,主线程获取并最先执行第一任务队列中的被依赖次数最少的目标任务。

同时,实施过程中,在此基础上,智能终端基于该主线程创建至少一个子线程。这里,创建的子线程的具体数目可根据情况进行灵活调整。

例如,在子线程中待执行的目标任务较多时,创建的子线程的数目就比较大。假设,有100个目标任务,必须在主线程运行的目标任务只有3个,剩下的目标任务都可以在子线程运行,这种情况下,子线程的数目可以设置大些。

又例如,假设,有100个目标任务,必须运行在主线程运行的目标任务有50个,那么,子线程的数目就最好不要太多,这种情况下太多子线程并不会加快速度,而且还会占用系统资源。

同样的,为了使子线程能够去第二任务队列中获取待执行的目标任务,智能终端将通过子线程获取并最先执行第二任务队列中的被依赖次数最少的目标任务。

步骤202:智能终端通过主线程依次获取并执行第一任务队列中的各个目标任务,以及,通过至少一个子线程中的每个子线程分别获取并执行第二任务队列中的各个目标任务。

实施过程中,参阅图4所示,智能终端通过主线程和至少一个子线程并行执行目标任务,即主线程依次获取并执行第一任务队列中的各个目标任务的同时,每个子线程分别获取并执行第二任务队列中的各个目标任务。

上述并行执行目标任务的过程中,智能终端通过主线程获取第一任务队列中的一个目标任务,以使主线程执行获取到的一个目标任务,待一个目标任务执行完毕后,通过主线程继续获取并执行第一任务队列中的下一个目标任务,直到第一任务队列为空。

具体的,智能终端通过主线程进行实施的过程为:依次获取第一任务队列中的目标任务,待获取到的一个目标任务执行完毕后,再继续获取第一任务队列中的下一个目标任务并执行,直到执行完第一任务队列中的所有目标任务为止,即直到第一任务队列为空。

需要说明的是,下一个目标任务(或者,下下一个目标任务)的执行依赖于一个目标任务,故智能终端通过主线程先执行该一个目标任务。

实施过程中,智能终端在主线程获取第一任务队列中的第一个目标任务时,通过至少一个子线程分别获取第二任务队列的目标任务,以使每个子线程并行执行获取到的不同的目标任务,待不同的目标任务执行完毕后,通过每个子线程继续获取并执行第二任务队列中的下一个目标任务,直到第二任务队列为空。

智能终端通过至少一个子线程中的每个子线程进行实施的过程为:依次获取第二任务队列中的目标任务,待获取到的一个目标任务执行完毕后,再继续获取第一任务队列中的下一个目标任务并执行,直到执行完第二任务队列中的所有目标任务为止,即直到第二任务队列为空。

需要说明的是,下一个目标任务(或者,下下一个目标任务)的执行依赖于一个目标任务,故智能终端通过子线程先执行该一个目标任务。

例如,假设第二任务队列中,目标任务由先到后的顺序为目标任务1、目标任务2、目标任务3…,实施过程为:子线程1先获取到了第二任务队列中的目标任务1并执行该目标任务1,子线程2又获取到了第二任务队列中的目标任务2并执行该目标任务2,子线程3又获取到了第二任务队列中的目标任务3并执行该目标任务3,…待子线程2执行完目标任务2又获取到了第二任务队列中的目标任务4并执行该目标任务4,待子线程3执行完目标任务3又获取到了第二任务队列中的目标任务5并执行该目标任务5,待子线程1执行完目标任务1又获取到了第二任务队列中的目标任务6并执行该目标任务6。

此外,本申请实施例中,另一方面主线程还可以执行第二任务队列中的目标任务,该流程具体包括:

智能终端若确定第一任务队列已为空,而第二任务队列不为空,则智能终端通过主线程从第二任务队列,获取并执行剩余的目标任务,即主线程必须执行的目标任务已经执行完毕,需要通过子线程执行的目标任务还未执行完毕时,在这种情况下,主线程充当子线程的角色和其他子线程一起,从第二任务队列中获取并执行剩余的目标任务。

综上可知,在调度任务的过程中会出现以下情况:

情况一:智能终端通过至少一个子线程中的各个子线程从第二任务队列中获取并执行目标任务;

情况二:智能终端通过主线程和至少一个子线程中的各个子线程从第二任务队列中获取并执行目标任务;

在上述两种情况中,依次获取目标任务的过程难免会出现第二任务队列中的某一个目标任务被遗漏的现象,在这种情况下,智能终端为目标任务增加可见性。

实施过程中,可通过设置标志位来表征已被获取的目标任务的总数目,具体的流程为在智能终端将目标任务放入第二任务队列之后,还包括智能终端为第二任务队列中的各个目标任务设置一个标志位,标志位表示已被获取的目标任务的总数目。

在具体实施过程中,智能终端为第二任务队列中的各个目标任务设置一个标志位,当一个目标任务被获取后,该标志位的赋值加一,以此类推直到最后一个目标任务被获取到,这样,标志位可用于表示已被获取的目标任务的总数目,通过该设置避免了目标任务被遗漏的现象,进而能够有效保障目标任务被执行的完整性,进一步的通过全局标志位的设置,避免了在多线程执行中引入加锁机制,主线程以及各个子线程能够通过该标志位的指引从第二任务队列中有条不紊的获取并执行目标任务,从而保证了运行性能。

对应于上述情况一,智能终端通过至少一个子线程中的每个子线程分别获取并执行第二任务队列中的各个目标任务的流程具体包括:

智能终端当第二任务队列中的一个目标任务被至少一个子线程中的任意一个子线程获取后,将标志位的赋值加一,以使至少一个子线程中的其他任一个子线程获取并执行第二任务队列中的下一个待执行的目标任务。

例如,假设,标志位的初值为0,第二任务队列中,目标任务由先到后的顺序为目标任务1、目标任务2、目标任务3…,当目标任务1被子线程1获取后,将标志位的赋值加一,即标志位的值为1,表示第二任务队列中的目标任务1已被一个子线程获取,在这种情况下,其他任一个子线程获取并执行第二任务队列中的下一个待执行的目标任务,即目标任务2。

对应于上述情况二,智能终端若确定第一任务队列已为空,而第二任务队列不为空之后的流程还包括:

当第二任务队列中的一个目标任务被至少一个子线程中的任意一个子线程获取后,智能终端将标志位的赋值加一,以使主线程或者至少一个子线程中的其他任一个子线程获取并执行第二任务队列中的下一个待执行的目标任务。

例如,假设,标志位的初值为0,第二任务队列中,目标任务由先到后的顺序为目标任务1、目标任务2、目标任务3…,当目标任务1被子线程1获取后,将标志位的赋值加一,即标志位的值为1,表示第二任务队列中的目标任务1已被一个子线程获取,在这种情况下,主线程或者其他任一个子线程获取并执行第二任务队列中的下一个待执行的目标任务,即目标任务2。

此外,在上述两种情况中,难免会出现第二任务队列中的同一个目标任务被多个线程同时获取的现象,即出现并发访问第二任务队列的情况。在这种情况下,智能终端为目标任务增加原子性,以保障目标任务被执行的唯一性。

实施过程中,若智能终端确定第一任务队列已为空,而第二任务队列不为空之后,对于同一个目标任务,智能终端还可以限制通过两个线程中的一个线程获取并执行,具体参阅图5所示,通过两个线程中的一个线程获取并执行一个目标任务的流程包括以下步骤:

步骤a:若第二任务队列中的同一个目标任务被两个线程同时获取,则智能终端判断标志位的赋值与第二任务队列中被获取到的任务总数是否一致,若是,则执行步骤b,否则,执行步骤c;其中,两个线程包括主线程和一个子线程,或者,包括两个子线程。

在智能终端通过主线程和至少一个子线程共同执行第二任务队列中的目标任务的过程中,如果同一个目标任务被两个线程同时获取,智能终端需要判断标志位的赋值与第二任务队列中被获取到的任务总数是否一致,即智能终端判断该同一个目标任务是否已经被两个线程中的一个线程获取到。

步骤b:智能终端通过两个线程中的一个线程执行第二任务队列中的当前待执行的目标任务。

即智能终端判断该同一个目标任务已经被两个线程中的一个线程获取到,在这种情况下,智能终端通过两个线程中的一个线程执行第二任务队列中的当前待执行的目标任务,即已经获取到的该同一个目标任务。

例如,假设,标志位的初值为0,第二任务队列中,目标任务由先到后的顺序为目标任务1、目标任务2、目标任务3…,当目标任务1被两个线程中的主线程获取后,将标志位的赋值加一,即标志位的值为1,表示第二任务队列中的目标任务1已被获取,在这种情况下,标志位的赋值1与第二任务队列中被获取到的任务总数1是一致的,主线程执行该目标任务1即可。

步骤c:智能终端将赋值加一,并通过两个线程中的一个线程获取第二任务队列中的下一个待执行的目标任务。

即智能终端判断该同一个目标任务没有被两个线程中的一个线程获取到,在这种情况下,智能终端通过两个线程中的一个线程去获取第二任务队列中的下一个待执行的目标任务。

例如,假设,标志位的初值为0,第二任务队列中,目标任务由先到后的顺序为目标任务1、目标任务2、目标任务3…,当目标任务1获取后标志位的赋值加一,即标志位的值为1,智能终端通过两个线程中的一个线程获取到第二任务队列中的当前待执行的目标任务2,但标志位的值还未及时更新,在这种情况下,标志位的赋值1与第二任务队列中被获取到的任务总数2是不一致的,智能终端将赋值加一,得到标志位的赋值为2,并通过两个线程中的一个线程获取第二任务队列中的下一个待执行的目标任务,即目标任务3。

下面采用几个具体的应用场景对上述实施例作进一步详细说明。

应用场景1:

参阅图6所示,假设,智能终端上待执行的目标任务一共有9个,分别为目标任务1、目标任务2、目标任务3、目标任务4、目标任务5、目标任务6、目标任务7、目标任务8和目标任务9,其中,必须通过主线程运行的目标任务为目标任务1、目标任务2和目标任务3,可以在主线程之外运行的目标任务为目标任务4、目标任务5、目标任务6、目标任务7、目标任务8和目标任务9。另外,假设上述9个目标任务的依赖关系均为后一个目标任务依赖前一个目标任务,具体的,参阅图7所示,目标任务2依赖目标任务1,目标任务3依赖目标任务2;目标任务5依赖目标任务4,目标任务6依赖目标任务5,目标任务7依赖目标任务6,目标任务8依赖目标任务7,目标任务9依赖目标任务8。

实施过程中,智能终端按照目标任务的依赖关系的先后顺序,将上述9个目标任务进行排序,得到排序结果为:目标任务1、目标任务2、目标任务3;以及,目标任务4、目标任务5、目标任务6、目标任务7、目标任务8、目标任务9。

首先,智能终端创建两个空的第一任务队列a和第二任务队列b,其中,第一任务队列a用于存放在主线程运行的目标任务1、目标任务2和目标任务3,第二任务队列b用于存放在主线程之外运行的目标任务4、目标任务5、目标任务6、目标任务7、目标任务8和目标任务9。

其次,智能终端创建主线程1以及基于主线程1创建两个子线程,其中,上述两个子线程分别是子线程1和子线程2。执行过程中,智能终端通过主线程1获取第一任务队列a中的一个目标任务即目标任务1,以使主线程1执行获取到的目标任务1,待目标任务1执行完毕后,智能终端通过主线程1继续获取并执行第一任务队列a中的下一个目标任务,即目标任务2,直到第一任务队列a为空,即目标任务3执行完毕。

在智能终端通过主线程1获取第一任务队列a中的目标任务1(即第一个目标任务)的同时,智能终端通过子线程1和子线程2获取第二任务队列b的目标任务,以使子线程1和子线程2并行执行获取到的不同的目标任务,假设,子线程1执行获取到的目标任务4,子线程2执行获取到的目标任务5,待目标任务4执行完毕后,智能终端通过子线程1继续获取并执行第二任务队列b中的下一个目标任务,以及,待目标任务5执行完毕后,智能终端通过子线程2继续获取并执行第二任务队列b中的下一个目标任务,直到第二任务队列为空。

假设,执行过程中,主线程1上的目标任务1、目标任务2和目标任务3耗时较短,智能终端通过主线程1已执行完第一任务队列a后,而第二任务队列b中仍有待执行的目标任务8和目标任务9时,则智能终端通过主线程1从第二任务队列b获取并执行剩余的目标任务。

另外,智能终端为第二任务队列b中的各个目标任务设置一个标志位w,w表示第二任务队列b中已被获取的目标任务的总数目,由于,w的初始值为0,当第二任务队列b中的目标任务4、目标任务5、目标任务6和目标任务7都被获取后,w的赋值连续四次加一后得到w的值为4。

在上述情况下,若智能终端通过主线程1和子线程1同时从第二任务队列b中获取目标任务8,则智能终端判断w的赋值与第二任务队列b中已被获取到的任务总数是否一致,通过比较w的值为4以及已被获取的目标任务为4个(目标任务4、目标任务5、目标任务6和目标任务7),结果为一致,表明目标任务8未被获取,此时,智能终端通过主线程1或者子线程1获取目标任务8。在此,假设,主线程1获取到目标任务8,w的赋值未及时进行加一运算,w的值仍为4。

继续执行过程中,智能终端通过子线程1和子线程2同时从第二任务队列b中获取目标任务9,则智能终端判断w的赋值与第二任务队列b中已被获取到的任务总数是否一致,通过比较w的值为4以及已被获取的目标任务为5个(目标任务4、目标任务5、目标任务6、目标任务7和目标任务8),结果为不一致,则智能终端将w的赋值加一,得到w的值为5,并通过子线程1或者子线程2获取第二任务队列中的下一个待执行的目标任务9。在此,假设,子线程1获取到目标任务9。至此,第一任务队列a和第二任务队列b中的各个目标任务均已被执行完毕。

基于同一发明构思,参阅图8所示,本申请实施例中提供一种调度任务的装置,包括:

队列创建单元810,用于基于目标任务之间的依赖关系,创建第一任务队列和第二任务队列,其中,第一任务队列用于存放在主线程运行的多个目标任务,第二任务队列用于存放在主线程之外运行的多个目标任务;

线程创建单元820,用于创建主线程以及基于主线程创建至少一个子线程;

执行单元830,用于通过主线程依次获取并执行第一任务队列中的各个目标任务,以及,通过至少一个子线程中的每个子线程分别获取并执行第二任务队列中的各个目标任务。

可选地,基于目标任务之间的依赖关系,创建第一任务队列和第二任务队列,队列创建单元810用于:

按照多个目标任务的依赖关系的先后顺序,将多个目标任务进行排序;

创建第一任务队列和第二任务队列;

依次获取多个目标任务,其中,针对获取的每一个目标任务,执行以下操作:

判断当前获取的一个目标任务,是否为在主线程运行的目标任务;

若是,基于排序结果,将目标任务放入第一任务队列;

否则,基于排序结果,将目标任务放入第二任务队列。

可选地,通过主线程依次获取并执行第一任务队列中的各个目标任务,以及,通过至少一个子线程中的每个子线程分别获取并执行第二任务队列中的各个目标任务,执行单元830用于:

在主线程获取第一任务队列中的第一个目标任务时,通过至少一个子线程分别获取第二任务队列的目标任务。

可选地,还包括:

为第二任务队列设置一个标志位,标志位表示第二任务队列中已被获取的目标任务的总数目。

可选地,还包括:

若确定第一任务队列已为空,而第二任务队列不为空,则通过主线程从第二任务队列,获取并执行剩余的目标任务。

可选地,通过至少一个子线程分别获取并执行第二任务队列中的各个目标任务,执行单元830用于:

当第二任务队列中的一个目标任务被至少一个子线程中的任意一个子线程获取后,将标志位的赋值加一,以使至少一个子线程中的其他任一个子线程获取并执行第二任务队列中的下一个待执行的目标任务。

可选地,若确定第一任务队列已为空,而第二任务队列不为空之后,执行单元830用于还用于:

当第二任务队列中的一个目标任务被至少一个子线程中的任意一个子线程获取后,将标志位的赋值加一,以使主线程或者至少一个子线程中的其他任一个子线程获取并执行第二任务队列中的下一个待执行的目标任务。

可选地,若确定第一任务队列已为空,而第二任务队列不为空之后,执行单元830用于还用于:

若第二任务队列中的同一个目标任务被两个线程同时获取,则判断标志位的赋值与第二任务队列中被获取到的任务总数是否一致;

若是,通过两个线程中的一个线程执行第二任务队列中的当前待执行的目标任务;

否则,将赋值加一,并通过两个线程中的一个线程获取第二任务队列中的下一个待执行的目标任务。

可选地,两个线程包括主线程和一个子线程,或者,包括两个子线程。

基于同一发明构思,参阅图9所示,本公开实施例提供一种智能终端900,例如,智能终端900可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。

参照图9,智能终端900可以包括以下一个或多个组件:处理组件902,存储器904,电源组件906,多媒体组件9012,音频组件912,输入/输出(I/O)的接口912,传感器组件914,以及通信组件916。

处理组件902通常控制智能终端900的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件902可以包括一个或多个处理器920来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件902可以包括一个或多个模块,便于处理组件902和其他组件之间的交互。例如,处理组件902可以包括多媒体模块,以方便多媒体组件9012和处理组件902之间的交互。

存储器909被配置为存储各种类型的数据以支持在智能终端900的操作。这些数据的示例包括用于在智能终端900上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器904可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。

电源组件906为智能终端900的各种组件提供电力。电源组件906可以包括电源管理系统,一个或多个电源,及其他与为智能终端900生成、管理和分配电力相关联的组件。

多媒体组件9012包括在智能终端900和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件9012包括一个前置摄像头和/或后置摄像头。当智能终端900处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。

音频组件912被配置为输出和/或输入音频信号。例如,音频组件912包括一个麦克风(MIC),当智能终端900处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器904或经由通信组件916发送。在一些实施例中,音频组件912还包括一个扬声器,用于输出音频信号。

I/O接口912为处理组件902和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。

传感器组件914包括一个或多个传感器,用于为智能终端900提供各个方面的状态评估。例如,传感器组件914可以检测到智能终端900的打开/关闭状态,组件的相对定位,例如所述组件为智能终端900的显示器和小键盘,传感器组件914还可以检测智能终端900或智能终端900一个组件的位置改变,用户与智能终端900接触的存在或不存在,智能终端900方位或加速/减速和智能终端900的温度变化。传感器组件914可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件914还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件914还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。

通信组件916被配置为便于智能终端900和其他设备之间有线或无线方式的通信。智能终端900可以接入基于通信标准的无线网络,如WiFi,运营商网络(如2G、3G、4G或5G),或它们的组合。在一个示例性实施例中,通信组件916经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件916还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。

在示例性实施例中,智能终端900可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述第一方面的任意一种方法。

基于同一发明构思,本申请实施例提供一种计算机可读存储介质,当所述存储介质中的指令由处理器执行时,使得所述处理器能够执行上述第一方面任一项所述的方法。

基于同一发明构思,本申请实施例提供一种计算机程序产品,包含可执行指令,当所述计算机程序产品的可执行指令由处理器执行时,能够实现如上述第一方面任一项所述的方法。

综上所述,本申请实施例中,智能终端基于目标任务之间的依赖关系,创建第一任务队列和第二任务队列,用以分别存放在主线程运行的多个目标任务和在主线程之外运行的多个目标任务,从而解决了目标任务必须在指定线程运行的要求;并且,智能终端创建主线程以及基于主线程创建至少一个子线程,这样在实施过程中,智能终端通过主线程依次获取并执行第一任务队列中的各个目标任务,以及,通过至少一个子线程中的每个子线程分别获取并执行第二任务队列中的各个目标任务,由于上述第一任务队列和第二任务队列是基于目标任务之间的依赖关系创建的,这样,在处理有依赖关系的目标任务的前提下,能够保证目标任务的均衡调度,从而能够在通过主线程运行目标任务的同时,也可以通过上述至少一个子线程运行其他目标任务,实现了主线程与多个子线程的并行执行,达到了各个线程都能均衡运行的目的,进一步提升了目标任务的执行效率,进而使得目标任务在线程之间的调度更加均衡。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品系统。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品系统的形式。

本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品系统的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

相关技术
  • 任务调度方法、任务调度装置、任务调度设备及存储介质
  • 任务调度方法、装置、任务调度平台及计算机存储介质
技术分类

06120113228981