任务执行方法、装置、计算机可读介质及电子设备与流程

文档序号:32795100发布日期:2023-01-03 22:09阅读:34来源:国知局
任务执行方法、装置、计算机可读介质及电子设备与流程

1.本技术属于计算机技术领域,具体涉及一种任务执行方法、装置、计算机可读介质及电子设备。


背景技术:

2.在当前的嵌入式操作系统中,系统中各个任务的运行是相互独立的,致使单片机的运行内存资源紧张,当任务较多时,无法分配足够的内存空间给新的任务。
3.需要说明的是,在上述背景技术部分公开的信息仅用于加强对本技术的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。


技术实现要素:

4.本技术的目的在于提供一种任务执行方法、装置、计算机可读介质及电子设备,以解决相关技术中的任务执行过程占用栈空间较多的问题。
5.本技术的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本技术的实践而习得。
6.根据本技术实施例的一个方面,提供一种任务执行方法,包括:
7.获取当前可调度的多个子任务中各所述子任务对应的需求栈空间;
8.根据最大的需求栈空间创建共享栈空间,所述共享栈空间大于所述最大的需求栈空间;
9.轮询所述多个子任务,从所述多个子任务中确定目标子任务;
10.执行所述目标子任务;
11.在所述目标子任务执行完毕后,释放所述目标子任务在所述共享栈空间中占用的存储空间,并返回所述轮询所述多个子任务,从所述多个子任务中确定目标子任务的步骤。
12.根据本技术实施例的一个方面,提供一种任务执行装置,包括:
13.需求栈空间获取模块,用于获取当前可调度的多个子任务中各所述子任务对应的需求栈空间;
14.共享栈空间创建模块,用于根据最大的需求栈空间创建共享栈空间,所述共享栈空间大于所述最大的需求栈空间;
15.目标子任务确定模块,用于轮询所述多个子任务,从所述多个子任务中确定目标子任务;
16.目标子任务执行模块,用于执行所述目标子任务;
17.栈空间释放模块,用于在所述目标子任务执行完毕后,释放所述目标子任务在所述共享栈空间中占用的存储空间。
18.在本技术的一个实施例中,目标子任务确定模块具体用于:
19.根据各个子任务的优先级排序,从所述多个子任务中获取优先级最高的子任务作为目标子任务。
20.在本技术的一个实施例中,目标子任务确定模块具体用于:
21.获取各所述子任务对应的运行间隔时长以及各所述子任务对应的运行周期;所述运行间隔时长为所述子任务对应的上一次执行时间与当前时间之间的时长;
22.根据各所述子任务对应的运行间隔时长以及各所述子任务对应的运行周期,从所述多个子任务中确定目标子任务;所述目标子任务对应的运行间隔时长大于所述目标子任务对应的运行周期。
23.在本技术的一个实施例中,所述子任务中包括异步触发子任务,所述异步触发子任务包括异步延时函数;当所述目标子任务为所述异步触发子任务时,目标子任务确定模块具体用于:
24.执行所述目标子任务中的函数;
25.在执行到所述异步延时函数时,将所述异步延时函数对应的回调函数的执行信息存储至延时调用队列;
26.继续执行所述目标子任务的其他函数。
27.在本技术的一个实施例中,所述执行信息包括延时时长;在所述目标子任务为延时调用子任务时,目标子任务确定模块具体用于:
28.轮询所述延时调用队列中的各所述回调函数的等待时长,所述等待时长为所述回调函数进入所述延时调用队列的时间与当前时间之间的时长;
29.在所述回调函数对应的等待时长大于或等于所述回调函数对应的延时时长时,执行所述回调函数。
30.在本技术的一个实施例中,所述装置还包括:
31.最大运行时长更新模块,用于根据所述目标子任务的起始执行时间和结束执行时间计算所述目标子任务的当前运行时长;若所述当前运行时长大于所述目标子任务对应的历史最大运行时长,则根据所述当前运行时长更新所述目标子任务对应的历史最大运行时长。
32.在本技术的一个实施例中,所述装置还包括:
33.异常提示模块,用于遍历各个子任务的历史最大运行时长,当任一子任务的历史最大运行时长大于所述子任务对应的预设运行时长时,将所述子任务作为异常子任务;根据所述异常子任务生成异常提示信息。
34.本技术各实施例中提供的任务执行装置的具体细节已经在对应的方法实施例中进行了详细的描述,此处不再赘述。
35.根据本技术实施例的一个方面,提供一种计算机可读介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如以上技术方案中的任务执行方法。
36.根据本技术实施例的一个方面,提供一种电子设备,该电子设备包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器被配置为经由执行所述可执行指令来执行如以上技术方案中的任务执行方法。
37.根据本技术实施例的一个方面,提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行如以上技术方案中的任务执行方法。
38.在本技术实施例提供的技术方案中,通过根据各个子任务所需最大栈空间创建共享栈空间,然后轮询多个子任务,从多个子任务中获取目标子任务,在共享栈空间中执行该目标子任务,并在当前子任务执行完毕后,释放该目标子任务在共享栈空间中所占用的存储空间,继续执行下一个子任务,相当于一个子任务在共享栈空间执行完毕后,在共享栈空间中继续执行下一个子任务,使得多个子任务在共享栈空间中执行,也就是使得多个子任务的执行能够共享同一个栈空间,无需单独为每个子任务分配独立的栈空间,减少了任务执行过程中栈空间的占用,可以有效提高系统内存资源的利用率。
39.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。
附图说明
40.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
41.图1示意性地示出了本技术一个实施例提供的任务执行方法的流程图。
42.图2示意性地示出了本技术一个实施例子任务创建过程的示意图。
43.图3示意性地示出了本技术一个实施例提供的异步延时调用过程的示意图。
44.图4示意性地示出了一种延时调用队列的示意图。
45.图5示意性地示出了一种传统延时任务执行过程的示意图。
46.图6示意性地示出了本技术一个实施例提供的任务执行过程共享栈空间的变化示意图。
47.图7示意性地示出了本技术一个实施例提供的传统任务执行过程的示意图。
48.图8示意性地示出了本技术实施例提供的任务执行装置的结构框图。
49.图9示意性示出了适于用来实现本技术实施例的电子设备的计算机系统结构框图。
具体实施方式
50.现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本技术将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
51.此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本技术的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本技术的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本技术的各方面。
52.附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
53.附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
54.本技术实施例提供的技术方案可以应用于终端设备,也可以应用于服务器,本技术对此不做特殊限定。终端设备可以包括智能手机、平板电脑、笔记本电脑、智能语音交互设备、智能家电、车载终端、家用储能设备、移动储能设备、自移动设备等设备中的一项或多项。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器。
55.在本技术的一个实施例中,本技术技术方案由终端设备实施。终端设备获取当前可调度的多个子任务中各子任务对应的需求栈空间,根据最大的需求栈空间创建共享栈空间,共享栈空间大于最大的需求栈空间。接下来,终端设备轮询多个子任务,从多个子任务中确定目标子任务,并执行目标子任务。在目标子任务执行完毕后,终端设备释放目标子任务在共享栈空间中占用的存储空间,并继续轮询以确定新的目标子任务。
56.下面结合具体实施方式对本技术提供的任务执行方法做出详细说明。
57.图1示意性地示出了本技术一个实施例提供的任务执行方法的流程图。如图1所示,该方法包括步骤110至步骤150,具体如下:
58.步骤110、获取当前可调度的多个子任务中各子任务对应的需求栈空间。
59.具体地,在本技术实施例提供的任务执行方法中,子任务是由主任务调度和执行的任务,主任务的功能是对多个子任务进行调度,不同子任务的功能可能不同,例如,注册子任务、登录子任务等。
60.栈空间是一种用于存储任务的函数参数和局部变量的内存空间,不同的任务所需栈空间的大小可能不同。在本技术实施例中,将一个子任务所需要的最大栈空间记为该子任务的需求栈空间,根据各个子任务需要存储的函数参数和局部变量的数量,就可以确定各个子任务的需求栈空间的大小。
61.在本技术的一个实施例中,图2示意性地示出了本技术一个实施例中子任务创建过程的示意图。如图2所示,主任务在系统内存中创建一个任务池,主任务同时对应用层提供任务注册接口,将调用任务注册接口进行注册的子任务顺序放入任务池中,每次主任务运行时,将对任务池中的各个子任务进行轮询,并根据轮序结果执行相应的子任务。
62.步骤120、根据最大的需求栈空间创建共享栈空间,共享栈空间大于最大的需求栈空间。
63.具体地,从各个子任务对应的需求栈空间中,选择一个最大的需求栈空间,基于该最大需求栈空间,创建一个大于或等于该最大需求栈空间的共享栈空间。由于共享栈空间大于或等于该最大需求栈空间,故而该共享栈空间可以满足任一个子任务的需求栈空间。
64.在本技术的一个实施例中,共享栈空间还包括主任务对应的需求栈空间,如此,共享栈空间大于或等于主任务对应的需求栈空间和子任务的最大需求栈空间之和。
65.步骤130、轮询多个子任务,从多个子任务中确定目标子任务。
66.具体地,轮询是指由主任务定时向各个子任务发出询问,依序确定每一个子任务是否需要执行,当确定某一个子任务需要执行时,则将该子任务作为目标子任务。子任务是否需要执行由不同的条件决定。示例性的,在一些场景中,子任务定期运行或定时运行,则
某一子任务是否需要执行取决于该子任务的运行周期是否已经达到或者定时时间是否已达到。又例如,在另一些场景中,若不同子任务之间设定了不同优先级,则是否执行某一子任务取决于该子任务的优先级在当前是否为最高。
67.步骤140、执行目标子任务。
68.具体地,子任务包括实现各种功能的函数,执行目标子任务就是运行目标子任务的各种函数,以实现函数所定义的功能。例如,目标子任务为注册任务,则执行目标子任务就是运行注册函数,以实现注册功能。步骤150、在目标子任务执行完毕后,释放目标子任务在共享栈空间中占用的存储空间,并返回轮询多个子任务,从多个子任务中确定目标子任务的步骤。
69.具体地,目标子任务的执行过程会使用共享栈空间的存储资源来存放该目标子任务的函数参数和局部变量等内容,因此,该目标子任务执行会使得在共享栈空间的可用空间缩减。在目标子任务执行完毕后,释放该目标子任务在共享栈空间所占用的存储空间,使得共享栈空间的可用空间恢复到原始大小,然后返回步骤130,继续执行下一个子任务。那么,下一个子任务又可以使用具有原始大小的栈空间执行,由于共享栈空间大于各自任务所需最大栈空间,所以每个子任务的执行都具备足够的栈空间,不会产生因共享栈空间不够而导致子任务执行异常的问题。
70.在本技术实施例提供的技术方案中,通过根据各个子任务所需最大栈空间创建共享栈空间,然后轮询多个子任务,从多个子任务中获取目标子任务,在共享栈空间中执行该目标子任务,并在当前子任务执行完毕后,释放该目标子任务在共享栈空间中所占用的存储空间,继续执行下一个子任务,相当于一个子任务在共享栈空间执行完毕后,在共享栈空间中继续执行下一个子任务,使得多个子任务在共享栈空间中执行,也就是使得多个子任务的执行能够共享同一个栈空间,无需单独为每个子任务分配独立的栈空间,减少了任务执行过程中栈空间的占用,可以有效提高系统内存资源的利用率。
71.在本技术的一个实施例中,在子任务注册时,预先为子任务设置一优先级,那么在步骤130中,当主任务在轮询多个子任务时,可以根据各个子任务的优先级排序,从多个子任务中获取优先级最高的子任务作为目标子任务。
72.在本技术的一个实施例中,在步骤130中,确定一个子任务是否需要执行,可以通过判断当前时间是否到达该子任务的执行时间来确定,包括:获取各子任务对应的运行间隔时长以及各子任务对应的运行周期;根据各子任务对应的运行间隔时长以及各子任务对应的运行周期,从多个子任务中确定目标子任务。
73.具体地,运行间隔时长为子任务对应的上一次执行时间与当前时间之间的时长,目标子任务对应的运行间隔时长大于或等于目标子任务对应的运行周期。当主任务轮询到一个子任务时,获取该子任务的上一次执行时间,然后根据当前时间与子任务上一次执行时间之间的时间差值确定该子任务的运行间隔时长。接下来,将子任务的运行间隔时长与该子任务的运行周期进行比较,当运行间隔时长大于或等于运行周期时,则说明当前已到达该子任务的执行时间,那么将该子任务作为目标子任务。当轮询到的子任务的运行间隔时长小于该子任务的运行周期时,表明该子任务不是需要立即执行的子任务,此时主任务继续轮询下一个子任务。
74.在本技术的一个实施例中,在步骤130中,在确定目标子任务时,还可以先根据优
先级对子任务进行分组,不同分组之间的优先级不同,每个分组内包括多个子任务。首先按照优先级从高到低的顺序依次轮询各个分组,在轮询到某个分组时,根据该优先级分组中子任务的运行间隔时长与对应运行周期大小,判断该优先级分组中的子任务是否为目标子任务。例如,假设有20个子任务,按优先级从高到低依次为a、b、c、d共4个分组,则每个分组包括5个子任务。首先轮询最高优先级的分组a中的5个子任务,根据当前时间与子任务上一次执行时间之间的间隔得到子任务的间隔运行时长,当间隔运行时长大于或等于子任务的运行周期时,将该子任务作为目标子任务。当分组a的5个子任务都轮询完毕后,继续轮询下一优先级的分组b的5个子任务,以此类推,直至轮询所有子任务。
75.在本技术的一个实施例中,在轮询子任务的过程中,可能有新的子任务产生,则将新的子任务加入到对应优先级的分组中等待下一轮轮询,或将新的子任务划分直接加入未被轮询的分组中,在本轮轮询中进行轮询。例如,在前述4*5(表示按优先级分为4组,每组包括5个子任务,后续表示类同)个子任务中,在轮询最高优先级对应的分组a中的子任务后,该分组a中的5个子任务已经执行完毕,此时产生了新的属于最高优先级的子任务,则将这个新的子任务加入到最高优先级的分组中,当剩下的3*5个子任务都轮询完毕后,继续轮询最高优先级分组中的子任务,也即,该新的子任务将在下一轮的轮询中被轮询。
76.又例如,在前述4*5个子任务中,在轮询分组a中的子任务过程中,当轮询到分组a中的第3个子任务时,产生了新的属于最高优先级的子任务,则将这个新的子任务添加至分组a中,当分组a中原有剩下的2个子任务都轮询完毕后,继续轮询该新的子任务,也就使得新的子任务在本轮轮询中被轮询。
77.在本技术的一个实施例中,在步骤130中,确定目标子任务的过程还可以是:根据各子任务对应的运行间隔时长以及各子任务对应的运行周期,从多个子任务中确定候选子任务;候选子任务对应的运行间隔时长大于候选子任务对应的运行周期;根据各个候选子任务的优先级排序,将优先级最高的候选子任务确定为目标子任务。
78.具体而言,将运行间隔时长大于运行周期的子任务记为候选子任务,那么候选子任务为等待了较长时间仍未执行的子任务,为了避免候选子任务继续长时间等待,此时可以安排这类候选子任务优先执行。在筛选出候选子任务后,从中选取优先级最高的候选子任务作为目标子任务。可选的,也可以选择运行间隔时长与运行周期的差值最大的候选子任务作为目标子任务。
79.在本技术的一个实施例中,子任务采用非阻塞方式设计,即子任务所包括的函数中不能有长时间的延时。在此种设计方式下,为了解决应用层的一些延时功能的需求,本技术实施例采用异步延时调用的方式来实现延时功能。该异步延时调用方式通过异步触发子任务来执行,该异步触发子任务也是可调用的多个子任务中的一种子任务。异步触发子任务包括异步延时函数,该异步延时函数可用于实现回调函数的延时运行。
80.当目标子任务为异步触发子任务时,步骤140中将执行异步触发子任务,具体过程包括:执行目标子任务中的函数;在执行到异步延时函数时,将异步延时函数对应的回调函数的执行信息存储至延时调用队列;继续执行目标子任务的其他函数。
81.具体地,在异步触发子任务的执行过程中,当执行到异步延时函数时,表明触发异步延时调用,此时将异步延时函数对应的回调函数的执行信息存储至延时调用队列,例如,将回调函数的执行信息作为一个回调单元存入延时调用队列,后续可以从延时调用队列中
获取回调函数的执行信息并执行回调函数,就实现了延时调用。在将回调函数的执行信息放入延时调用队列后,继续执行目标子任务的其他函数以完成目标子任务的执行。通过异步延时调用的方式,既实现了相关函数的延时运行需求,又使得子任务中无需延时运行的函数能够更快运行,即不需要等待需要延时运行的函数运行完毕后才运行,提高了子任务的执行效率。
82.回调函数的执行信息包括延时时长、回调参数信息等,延时时长是指需要延时运行的函数所需要延长的时间,回调参数信息用于确定具体需要回调执行的函数。异步延时调用方式的具体过程是:在目标子任务为延时调用子任务时,轮询延时调用队列中的各回调函数的等待时长;在回调函数对应的等待时长大于或等于回调函数对应的延时时长时,执行回调函数。
83.可以理解,等待时长为回调函数进入延时调用队列的时间与当前时间之间的时长。延时调用子任务也是可调用的多个子任务中的一种子任务,用于执行在异步触发子任务中被延时调用的回调函数。当目标子任务为延时调用子任务时,该延时调用子任务轮询延时调用队列中的各回调函数的执行信息,同时根据当前时间与各回调函数的执行信息添加至延时调用队列的时间之间的差值,确定各回调函数的等待时长。当一个回调函数的等待时长大于或等于该回调函数的执行信息中所设定的延时时长时,说明该回调函数已经延时足够长的时间,此时根据异步延时函数传入的回调参数执行对应的回调函数。
84.在一个回调函数执行完毕后,将该回调函数的执行信息从延时调用队列中删除,也就是将已执行的回调函数出队,避免其占用队列空间。
85.示例性的,图3示意性地示出了本技术一个实施例提供的异步延时调用过程的示意图。如图3所示,假设异步触发子任务310包括函数1、函数3和函数4,延时调用子任务包括函数2,其中,函数1、函数3和函数4不需要延时执行,函数3是异步延时函数,函数2需要在函数3之后延时t时间执行,属于回调函数。
86.如图3所示,在异步触发子任务310的执行过程中,当执行完函数1后,执行函数3,那么触发异步延时调用,函数3的执行就是将函数2的执行信息存储至延时调用队列,后续由延时调用子任务320执行函数2。
87.函数3执行完后,继续执行异步触发子任务310的函数4,如图3所示,也就表明异步延时调用在延时期间,无需等待需延时函数的执行,而是在执行异步延时函数后,继续执行不需要延时的函数。
88.如图3所示,当目标子任务为延时调用子任务320,延时调用子任务320轮询延时调用队列中各回调函数,判断当前时间是否到达对应回调函数的执行时间,当回调函数的等待时长大于或等于该回调函数的执行信息中所设定的延时时长时,表示到达该回调函数的执行时间。假设在异步延时函数在t1时刻执行完毕,当到达t2时刻时,t2时刻与t1时刻之间的差值达到了函数2的延时时长t,那么延时调用子任务320在t2时刻执行回调函数,也就是执行函数2,从而实现延时调用。
89.示例性的,图4示意性地示出了一种延时调用队列的示意图。当触发异步延时函数时,该异步延时函数将回调函数的执行信息作为一个调用单元411,在延时调用队列410中注册异步延时调用,将调用单元411添加至延时调用队列410中。延时调用队列410包括多个调用单元411,当前添加的调用单元411作为新调用单元添加至延时调用队列410的队尾。
90.在执行到时调用任务320时,延时调用子任务320轮询延时调用队列410,判断当前时间是否到达回调函数的执行时间,若到达,则执行对应的回调函数,如图3所示。对于执行完毕的回调函数,将对应的调用单元411出队,空出队列空间给新的调用单元使用。
91.示例性,图5示意性地示出了一种传统延时任务执行过程的示意图。如图5所示,若一个任务具有第一函数511和第二函数512,第二函数512需要在第一函数511之后延时t时间执行。在相关技术方案中,首先执行第一函数511,在第一函数511执行完毕后,暂停等待延时时长t后,再继续执行第二函数512。
92.根据图3所示的本技术技术方案的异步延时调用示意图和图5所示的传统技术方案的延时调用示意图的对比可知,本技术的异步延时调用在延时时间中,可以继续执行目标子任务的其他函数或其他子任务的函数,而无需像传统技术方案一样暂停等待延时功能函数的执行,提高了任务执行效率。
93.示例性的,图6示意性地示出了本技术一个实施例提供的任务执行过程共享栈空间的变化示意图。如图6所示,当前可调度的子任务有n个,分别记为子任务1、子任务2、子任务3
……
子任务n,子任务3的需求栈空间最大,那么共享栈空间大于子任务3的需求栈空间。假设轮流过程各个子任务按照编号的顺序依次执行,在子任务1执行时,任务栈指针从共享栈空间的起始地址开始,随着子任务1使用共享栈空间存储函数参数、局部变量等数据,任务栈指针向任务栈结束地址移动,当子任务1需要栈空间存储的数据均存储至共享栈空间后,任务栈指针到达子任务1的需求栈空间大小所指示的位置,如图6所示,任务栈指针到达地址1,那么任务栈起始地址到地址1这一段栈空间被子任务1占用。在子任务1执行完毕后,释放子任务1在共享栈空间中占用的存储空间,任务栈指针重新回到任务栈起始地址。继续执行子任务2时,任务栈指针又从任务栈起始地址开始向任务栈结束地址移动,直至子任务2执行完毕,任务栈指针到达地址2,任务栈起始地址到地址2这一段栈空间被子任务2占用。在子任务2执行完毕后,释放子任务2在共享栈空间中占用的存储空间,任务栈指针重新回到任务栈起始地址,继续执行子任务3。以此类推,实现n个子任务的顺序执行,且n个子任务共同使用了一个共享栈空间。
94.可以理解,主任务运行时也占用一定的栈空间,图6中并未示出主任务占用的栈空间。由于主任务一直在运行,可以在共享栈空间中划出一个固定的存储空间供主任务运行。示例性的,主任务的栈空间可以为共享栈空间起始地址后的预设存储区,其他子任务的任务栈起始地址在该预设存储区栈后开始。
95.图7示意性地示出了本技术一个实施例提供的传统任务执行过程的示意图。如图7所示,在传统技术方案中,系统为每个任务分配一个栈空间,当有n个任务时,则需要分配n个栈空间,这极大提高了系统内存空间的占有率,当任务过多时,将导致系统资源不足。同时,在传统技术方案中,n个任务的执行并不是顺序的,可能是先执行任务1,再执行任务3,还有可能在任务1未执行完毕的过程中去执行其他任务,这将导致任务执行较为混乱,容易出错,而本技术的顺序执行不会产生这种问题。
96.根据图6所示的本技术技术方案的任务执行过程和图7所示的传统技术方案的任务执行过程的对比可知,本技术多个子任务的执行共享同一个栈空间,系统无需单独为每个子任务分配独立的栈空间,减少了任务执行过程中栈空间的占用,可以有效提高系统内存资源的利用率。
97.在本技术的一个实施例中,子任务包括:名称、运行周期、优先级、起始执行时间、结束执行时间、历史最大运行时长和执行函数。起始执行时间是指开始执行子任务的时间,结束执行时间是指子任务执行完毕的时间,每一次执行子任务时,都需要记录这两个时间。根据起始执行时间和结束执行时间之间的差值可以计算出子任务的运行时长,将该运行时长与记录的最大历史运行时长进行比较,以刷新该任务的最大历史运行时长。以目标子任务为例:根据目标子任务的起始执行时间和结束执行时间计算目标子任务的当前运行时长;若当前运行时长大于目标子任务对应的历史最大运行时长,则根据当前运行时长更新目标子任务对应的历史最大运行时长。若当前运行时长小于或等于目标子任务对应的历史最大运行时长,则保持该历史最大运行时长不变。
98.在本技术的一个实施例中,本技术技术方案还包括:遍历各个子任务的历史最大运行时长,当任一子任务的历史最大运行时长大于子任务对应的预设运行时长时,将子任务作为异常子任务;根据异常子任务生成异常提示信息。
99.具体而言,可以通过子任务的历史最大运行时长判断该子任务是否出现异常。当一个子任务的历史最大运行时长大于该子任务对应的预设运行时长时,表明该子任务出现异常,将该子任务作为异常子任务,生成异常提示信息。该异常提示信息可以通过语音、短信、邮件等方式发送至预设的联系人,以便联系人及时进行维护。
100.应当注意,尽管在附图中以特定顺序描述了本技术中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
101.以下介绍本技术的装置实施例,可以用于执行本技术上述实施例中的任务执行方法。图8示意性地示出了本技术实施例提供的任务执行装置的结构框图。如图8所示,本技术实施例提供的任务执行装置包括:
102.需求栈空间获取模块810,用于获取当前可调度的多个子任务中各子任务对应的需求栈空间。
103.共享栈空间创建模块820,用于根据最大的需求栈空间创建共享栈空间,该共享栈空间大于上述最大的需求栈空间。
104.目标子任务确定模块830,用于轮询多个子任务,从多个子任务中确定目标子任务。
105.目标子任务执行模块840,用于执行目标子任务。
106.栈空间释放模块850,用于在该目标子任务执行完毕后,释放该目标子任务在共享栈空间中占用的存储空间。
107.在本技术的一个实施例中,目标子任务确定模块830具体用于:
108.根据各个子任务的优先级排序,从多个子任务中获取优先级最高的子任务作为目标子任务。
109.在本技术的一个实施例中,目标子任务确定模块830具体用于:
110.获取各子任务对应的运行间隔时长以及各子任务对应的运行周期;该运行间隔时长为子任务对应的上一次执行时间与当前时间之间的时长;
111.根据各子任务对应的运行间隔时长以及各子任务对应的运行周期,从多个子任务
中确定目标子任务;目标子任务对应的运行间隔时长大于目标子任务对应的运行周期。
112.在本技术的一个实施例中,子任务中包括异步触发子任务,异步触发子任务包括异步延时函数;当目标子任务为所述异步触发子任务时,目标子任务确定模块830具体用于:
113.执目标子任务中的函数;
114.在执行到异步延时函数时,将异步延时函数对应的回调函数的执行信息存储至延时调用队列;
115.继续执行目标子任务的其他函数。
116.在本技术的一个实施例中,执行信息包括延时时长;在目标子任务为延时调用子任务时,目标子任务确定模块830具体用于:
117.轮询延时调用队列中的各回调函数的等待时长,该等待时长为回调函数进入所述延时调用队列的时间与当前时间之间的时长;
118.在回调函数对应的等待时长大于或等于回调函数对应的延时时长时,执行所述回调函数。
119.在本技术的一个实施例中,上述任务执行装置还包括:
120.最大运行时长更新模块,用于根据目标子任务的起始执行时间和结束执行时间计算目标子任务的当前运行时长;若该当前运行时长大于目标子任务对应的历史最大运行时长,则根据该当前运行时长更新目标子任务对应的历史最大运行时长。
121.在本技术的一个实施例中,上述任务执行装置还包括:
122.异常提示模块,用于遍历各个子任务的历史最大运行时长,当任一子任务的历史最大运行时长大于该子任务对应的预设运行时长时,将该子任务作为异常子任务;根据该异常子任务生成异常提示信息。
123.本技术各实施例中提供的任务执行装置的具体细节已经在对应的方法实施例中进行了详细的描述,此处不再赘述。
124.图9示意性地示出了用于实现本技术实施例的电子设备的计算机系统结构框图。
125.需要说明的是,图9示出的电子设备的计算机系统900仅是一个示例,不应对本技术实施例的功能和使用范围带来任何限制。
126.如图9所示,计算机系统900包括中央处理器901(central processing unit,cpu),其可以根据存储在只读存储器902(read-only memory,rom)中的程序或者从存储部分908加载到随机访问存储器903(random access memory,ram)中的程序而执行各种适当的动作和处理。在随机访问存储器903中,还存储有系统操作所需的各种程序和数据。中央处理器901、在只读存储器902以及随机访问存储器903通过总线904彼此相连。输入/输出接口905(input/output接口,即i/o接口)也连接至总线904。
127.以下部件连接至输入/输出接口905:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(cathode ray tube,crt)、液晶显示器(liquid crystal display,lcd)等以及扬声器等的输出部分907;包括硬盘等的存储部分908;以及包括诸如局域网卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至输入/输出接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被
安装入存储部分908。
128.特别地,根据本技术的实施例,各个方法流程图中所描述的过程可以被实现为计算机软件程序。例如,本技术的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被中央处理器901执行时,执行本技术的系统中限定的各种功能。
129.需要说明的是,本技术实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(erasable programmable read only memory,eprom)、闪存、光纤、便携式紧凑磁盘只读存储器(compact disc read-only memory,cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本技术中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本技术中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
130.附图中的流程图和框图,图示了按照本技术各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
131.应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本技术的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
132.通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本技术实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd-rom,u盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算
设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本技术实施方式的方法。
133.本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本技术的其它实施方案。本技术旨在涵盖本技术的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本技术的一般性原理并包括本技术未公开的本技术领域中的公知常识或惯用技术手段。
134.应当理解的是,本技术并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本技术的范围仅由所附的权利要求来限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1