待执行任务的执行方法、装置、存储介质及电子装置与流程
未命名
07-19
阅读:221
评论:0
1.本技术涉及智慧家庭技术领域,具体而言,涉及一种待执行任务的执行方法、装置、存储介质及电子装置。
背景技术:
2.目前,在基于嵌入式操作系统的软件栈设计思想中,线程操作往往具有繁琐的步骤,导致实现过程复杂,例如需要内存申请和释放,线程堆栈的分配和删除,线程描述数据的创建和删除,cpu执行权限切换等多重步骤,这会消耗一定的计算资源和时间的开销。因此,对于有多个不需要持续运行的任务处理应用场景,多采用线程池的方式,即预先创建一定数量的线程并通过某种共享机制实现多任务共享有限的线程。
3.然而,目前实现的线程池,基本都是通过依赖于线程管理模块来提供线程池内的线程管理功能,进而使用线程执行任务。但是,这种实现过程依赖于线程管理模块,实现逻辑复杂,占用系统存储空间较大,在运行时需要极大的系统内存等资源,在资源受限的运行环境下,由于没有足够的系统资源,线程管理模块往往不能正常工作或者工作受限,无法及时执行任务。
4.因此,相关技术中,具有在资源受限的运行环境下如何执行任务的技术问题。
5.针对相关技术中,在资源受限的运行环境下如何执行任务的技术问题,尚未提出有效的解决方案。
技术实现要素:
6.本技术实施例提供了一种待执行任务的执行方法、装置、存储介质及电子装置,以至少解决相关技术中,在资源受限的运行环境下如何执行任务的技术问题。
7.根据本技术实施例的一个实施例,提供了一种待执行任务的执行方法,包括:响应于目标对象的执行指令,从线程池内确定已创建的多个线程;根据任务队列中所有待执行任务的任务数量确定出所述任务队列的计数信号量,其中,所述计数信号量的计数值与所述任务数量相等;在确定所述计数信号量的计数值大于第一预设阈值的情况下,使用所述多个线程执行所述待执行任务。
8.在一个示例性实施例中,在根据任务队列中所有的待执行任务的任务数量确定出所述任务队列对应的计数信号量之前,所述方法还包括:获取所述目标对象的操作指令的操作类型;在确定所述操作类型用于指示新增任务的情况下,在所述任务队列中创建与所述操作指令对应的第一待执行任务;在确定所述操作类型用于指示删除任务的情况下,在所述任务队列中删除与所述操作指令对应的第二待执行任务。
9.在一个示例性实施例中,在所述任务队列中创建与所述操作指令对应的第一待执行任务,包括:在确定所述第一待执行任务为周期性执行任务的情况下,获取所述第一待执行任务的执行周期和执行次数;控制定时器按照所述执行周期在所述任务队列中循环创建所述第一待执行任务。
10.在一个示例性实施例中,通过以下方式确定所述计数信号量的计数值:根据所述第一待执行任务的循环创建的次数确定出所述第一待执行任务的新建任务数量,并将所述新建任务数量确定为所述计数值的增加值;将第一计数值和所述增加值的和值更新为所述计数值,其中,所述第一计数值与所述任务数量一致。
11.在一个示例性实施例中,在所述任务队列中创建与所述操作指令对应的第一待执行任务,包括:在确定所述第一待执行任务为临时性执行任务的情况下,在所述任务队列中创建所述第一待执行任务,其中,所述第一待执行任务对应最低执行优先级;通过以下方式确定所述计数信号量的计数值,包括:根据所述第一待执行任务的创建次数确定所述第一待执行任务的新建任务数量,并将所述新建任务数量确定为所述计数值的增加值;将第二计数值和所述增加值的和值更新为所述计数值,其中,所述第二计数值与所述任务数量一致。
12.在一个示例性实施例中,在所述任务队列中删除与所述操作指令对应的第二待执行任务,包括:在确定所述第二待执行任务为周期性执行任务的情况下,确定出循环创建所述第二待执行任务时用到的定时器,以及所述定时器的第一存储地址;获取所述第二待执行任务的执行入口地址,其中,所述执行入口地址用于表示所述任务队列的第二待执行任务的第二存储地址;在确定所述第一存储地址和所述第二存储地址一致的情况下,删除所述定时器,同时获取所述任务队列内下一个待执行任务的执行入口地址;在确定所述下一个待执行任务的执行入口地址与所述第一存储地址一致的情况下,在所述任务队列中删除与所述操作指令对应的第二待执行任务。
13.在一个示例性实施例中,在所述任务队列中删除与所述操作指令对应的第二待执行任务,包括:在确定所述第二待执行任务为临时性执行任务的情况下,获取在创建所述第二待执行任务之后所存储的所述第二待执行任务的第三存储地址;从所述操作指令中获取所述第二待执行任务的执行入口地址,其中,所述执行入口地址用于表示所述任务队列的第二待执行任务的第四存储地址;在确定所述第三存储地址和所述第四存储地址一致的情况下,在所述任务队列中删除与所述操作指令对应的第二待执行任务。
14.在一个示例性实施例中,在确定所述操作指令的操作类型之后,所述方法还包括:确定所述计数信号量的计数值是否大于第二预设阈值,其中,所述第二预设阈值大于所述第一预设阈值,用于表示所述待执行任务的最大任务数量;在确定所述计数值大于所述第二预设阈值的情况下,禁止在所述任务队列中创建与所述操作指令对应的第一待执行任务。
15.根据本技术实施例的另一个实施例,还提供了一种待执行任务的执行装置,包括:响应模块,用于响应于目标对象的执行指令,从线程池内确定已创建的多个线程;确定模块,用于根据任务队列中所有待执行任务的任务数量确定出所述任务队列的计数信号量,其中,所述计数信号量的计数值与所述任务数量相等;执行模块,用于在确定所述计数信号量的计数值大于第一预设阈值的情况下,使用所述多个线程执行所述待执行任务。
16.根据本技术实施例的又一方面,还提供了一种计算机可读的存储介质,该计算机可读的存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述待执行任务的执行方法。
17.根据本技术实施例的又一方面,还提供了一种电子装置,包括存储器、处理器及存
储在存储器上并可在处理器上运行的计算机程序,其中,上述处理器通过计算机程序执行上述的待执行任务的执行方法。
18.在本技术实施例中,响应于目标对象的执行指令,从线程池内确定已创建的多个线程;根据任务队列中所有待执行任务的任务数量确定出具有与所述任务数量相等的所述任务队列的计数信号量;在确定所述计数信号量的计数值大于第一预设阈值的情况下,使用所述多个线程执行所述待执行任务;采用上述技术方案,解决了在资源受限的运行环境下如何执行任务的技术问题,进而实现在资源受限的运行环境下执行任务。
附图说明
19.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。
20.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
21.图1是本技术实施例的一种待执行任务的执行方法的硬件环境示意图;
22.图2是根据本技术实施例的待执行任务的执行方法的流程图;
23.图3是根据本技术实施例的待执行任务的执行方法的示意图;
24.图4是根据本技术实施例的一种待执行任务的执行装置的结构框图(一);
25.图5是根据本技术实施例的一种待执行任务的执行装置的结构框图(二)。
具体实施方式
26.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分的实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本技术保护的范围。
27.需要说明的是,本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
28.根据本技术实施例的一个方面,提供了一种待执行任务的执行方法。该待执行任务的执行方法广泛应用于智慧家庭(smart home)、智能家居、智能家用设备生态、智慧住宅(intelligence house)生态等全屋智能数字化控制应用场景。可选地,在本实施例中,上述待执行任务的执行方法可以应用于如图1所示的由终端设备102和服务器104所构成的硬件环境中。如图1所示,服务器104通过网络与终端设备102进行连接,可用于为终端或终端上安装的客户端提供服务(如应用服务等),可在服务器上或独立于服务器设置数据库,用于
为服务器104提供数据存储服务,可在服务器上或独立于服务器配置云计算和/或边缘计算服务,用于为服务器104提供数据运算服务。
29.上述网络可以包括但不限于以下至少之一:有线网络,无线网络。上述有线网络可以包括但不限于以下至少之一:广域网,城域网,局域网,上述无线网络可以包括但不限于以下至少之一:wifi(wireless fidelity,无线保真),蓝牙。终端设备102可以并不限定于为pc、手机、平板电脑、智能空调、智能烟机、智能冰箱、智能烤箱、智能炉灶、智能洗衣机、智能热水器、智能洗涤设备、智能洗碗机、智能投影设备、智能电视、智能晾衣架、智能窗帘、智能影音、智能插座、智能音响、智能音箱、智能新风设备、智能厨卫设备、智能卫浴设备、智能扫地机器人、智能擦窗机器人、智能拖地机器人、智能空气净化设备、智能蒸箱、智能微波炉、智能厨宝、智能净化器、智能饮水机、智能门锁等。
30.在本实施例中提供了一种待执行任务的执行方法,应用于上述终端设备,图2是根据本技术实施例的待执行任务的执行方法的流程图,该流程包括如下步骤:
31.步骤s202,响应于目标对象的执行指令,从线程池内确定已创建的多个线程;
32.步骤s204,根据任务队列中所有待执行任务的任务数量确定出所述任务队列的计数信号量,其中,所述计数信号量的计数值与所述任务数量相等;
33.步骤s206,在确定所述计数信号量的计数值大于第一预设阈值的情况下,使用所述多个线程执行所述待执行任务。
34.通过上述步骤,响应于目标对象的执行指令,从线程池内确定已创建的多个线程;根据任务队列中所有待执行任务的任务数量确定出所述任务队列的计数信号量,其中,所述计数信号量的计数值与所述任务数量相等;在确定所述计数信号量的计数值大于第一预设阈值的情况下,使用所述多个线程执行所述待执行任务,解决了相关技术中,在资源受限的运行环境下如何执行任务的技术问题,进而实现在资源受限的运行环境下执行任务。
35.其中,需要说明的是,上述第一预设阈值例如可以为0,那么在确定所述计数信号量的计数值大于0的情况下,可以使用所述多个线程执行所述待执行任务。如果确定所述计数信号量的计数值不大于0,则说明多个线程均为阻塞状态,无法执行待执行任务。
36.例如,在一个实施例中,可以将任务队列确定为目标管理对象,将任务队列视为一种资源,让线程池中的线程竞争获取资源。线程池中竞争到资源(取得任务队列中的一个任务)的线程可以运行,竞争不到资源的线程则被操作系统阻塞,无需额外的线程管理开销,这种方法省去了对线程池中线程状态的管理环节,提高了待执行任务的执行效率。
37.在一个示例性实施例中,进一步的,在执行上述步骤s204中根据任务队列中所有的待执行任务的任务数量确定出所述任务队列对应的计数信号量的技术方案之前,还可以获取所述目标对象的操作指令的操作类型;在确定所述操作类型用于指示新增任务的情况下,在所述任务队列中创建与所述操作指令对应的第一待执行任务;在确定所述操作类型用于指示删除任务的情况下,在所述任务队列中删除与所述操作指令对应的第二待执行任务。
38.其中,可选的,对于在所述任务队列中创建与所述操作指令对应的第一待执行任务的步骤,可以理解为满足所述操作类型用于指示新增任务,以及所述计数值大于所述第一预设阈值,才允许在所述任务队列中新建与所述操作指令对应的第一待执行任务。
39.需要说明的是,对于在所述任务队列中删除与所述操作指令对应的第二待执行任
务的步骤,可以理解为需满足第二待执行任务没有被任何线程执行,即没有占用计算资源,才允许在所述任务队列中删除与所述操作指令对应的第二待执行任务。
40.在一个示例性实施例中,进一步提出如何实现在所述任务队列中创建与所述操作指令对应的第一待执行任务的技术方案,具体步骤包括:在确定所述第一待执行任务为周期性执行任务的情况下,获取所述第一待执行任务的执行周期和执行次数;控制定时器按照所述执行周期在所述任务队列中循环创建所述第一待执行任务。
41.其中,可选的,上述获取所述第一待执行任务的执行周期和执行次数例如可以从操作指令中获取,但不限于此。
42.需要说明的是,在确定所述第一待执行任务为周期性执行任务之后,继而创建一个定时器与第一待执行任务绑定,将定时器的定时长度设置为第一待执行任务的执行周期,当定时器溢出,第一待执行任务会被定时器触发的处理动作加入到线程池待执行队列的队尾。
43.在一个示例性实施例中,确定出所述第一待执行任务循环创建的次数,其中,所述第一待执行任务对应最高执行优先级。在所述循环创建的次数大于或等于所述执行次数的情况下,停止在所述任务队列中循环创建所述第一待执行任务。在在所述循环创建的次数小于所述执行次数的情况下,在所述任务队列中循环创建所述第一待执行任务。其中,具有最高执行优先级的待执行任务为最先执行的待执行任务。
44.对于控制定时器按照所述执行周期在所述任务队列中循环创建所述第一待执行任务的过程,对于循环创建的次数等于所述执行次数的情况,例如执行周期为10分钟,执行次数为3,那么每隔10分钟创建一次第一待执行任务,第一待执行任务经过30分钟后的创建次数为3,则停止循环创建所述第一待执行任务。对于循环创建的次数大于所述执行次数的情况,例如执行周期为10分钟,执行次数为4,那么每隔10分钟创建一次第一待执行任务,第一待执行任务在经过50分钟后的创建次数为5,则停止循环创建所述第一待执行任务。
45.在一个示例性实施例中,还可以通过以下方式确定所述计数信号量的计数值:根据所述第一待执行任务的循环创建的次数确定出所述第一待执行任务的新建任务数量,并将所述新建任务数量确定为所述计数值的增加值;将第一计数值和所述增加值的和值更新为所述计数值,其中,所述第一计数值与所述任务数量一致。
46.在一个示例性实施例中,进一步提出了一种如何在所述任务队列中创建与所述操作指令对应的第一待执行任务的技术方案,具体步骤如下:在确定所述第一待执行任务为临时性执行任务的情况下,在所述任务队列中创建所述第一待执行任务,其中,所述第一待执行任务对应最低执行优先级;通过以下方式确定所述计数信号量的计数值,包括:根据所述第一待执行任务的创建次数确定所述第一待执行任务的新建任务数量,并将所述新建任务数量确定为所述计数值的增加值;将第二计数值和所述增加值的和值更新为所述计数值,其中,所述第二计数值与所述任务数量一致。
47.其中,需要说明的是,第一待执行任务的执行优先级越低,第一待执行任务越晚执行。
48.在一个示例性实施例中,进一步的,对于在所述任务队列中删除与所述操作指令对应的第二待执行任务的实现过程,具体通过以下步骤进行说明:在确定所述第二待执行任务为周期性执行任务的情况下,确定出循环创建所述第二待执行任务时用到的定时器,
以及所述定时器的第一存储地址;获取所述第二待执行任务的执行入口地址,其中,所述执行入口地址用于表示所述任务队列的第二待执行任务的第二存储地址;在确定所述第一存储地址和所述第二存储地址一致的情况下,删除所述定时器,同时获取所述任务队列内下一个待执行任务的执行入口地址;在确定所述下一个待执行任务的执行入口地址与所述第一存储地址一致的情况下,在所述任务队列中删除与所述操作指令对应的第二待执行任务。
49.其中,获取所述第二待执行任务的执行入口地址,例如可以从操作指令中获取,但不限于此。
50.可选的,在确定所述第一存储地址和所述第二存储地址不一致的情况下,无法对所述第二待执行任务进行删除,向目标对象发送通知消息,其中,所述通知消息用于提示目标对象第二待执行任务无法删除。
51.对于在确定所述下一个待执行任务的执行入口地址与所述第一存储地址一致的情况下,在所述任务队列中删除与所述操作指令对应的第二待执行任务,可选的,还可以同时将第三计数值和第一预设值的差值更新为所述计数值,其中,所述第三计数值与所述任务数量一致。
52.在一个示例性实施例中,还提出了其他在所述任务队列中删除与所述操作指令对应的第二待执行任务的实现方案,具体步骤包括:在确定所述第二待执行任务为临时性执行任务的情况下,获取在创建所述第二待执行任务之后所存储的所述第二待执行任务的第三存储地址;从所述操作指令中获取所述第二待执行任务的执行入口地址,其中,所述执行入口地址用于表示所述任务队列的第二待执行任务的第四存储地址;在确定所述第三存储地址和所述第四存储地址一致的情况下,在所述任务队列中删除与所述操作指令对应的第二待执行任务。
53.可选的,在确定所述第三存储地址和所述第四存储地址不一致的情况下,无法对所述第二待执行任务进行删除,向目标对象发送通知消息,其中,所述通知消息用于提示目标对象第二待执行任务无法删除。
54.对于在确定所述第三存储地址和所述第四存储地址一致的情况下,在所述任务队列中删除与所述操作指令对应的第二待执行任务,还可以同时将第四计数值和第一预设值的差值更新为所述计数值,其中,所述第四计数值与所述任务数量一致。
55.在一个示例性实施例中,进一步的,在确定所述操作指令的操作类型之后,进而确定所述计数信号量的计数值是否大于第二预设阈值,其中,所述第二预设阈值大于所述第一预设阈值,用于表示所述待执行任务的最大任务数量;在确定所述计数值大于所述第二预设阈值的情况下,禁止在所述任务队列中创建与所述操作指令对应的第一待执行任务。
56.在其他实施例中,还可以在所述操作类型不用于指示新增任务或者所述计数值小于所述第一预设阈值的情况下,禁止在所述任务队列中创建与所述操作指令对应的第一待执行任务。
57.为了更好的理解上述待执行任务的执行方法的过程,以下再结合可选实施例对上述待执行任务的执行的实现方法流程进行说明,但不用于限定本技术实施例的技术方案。
58.接下来,结合图3提供了一种待执行任务的执行方法,图3是根据本技术实施例的待执行任务的执行方法的示意图,如图3所示,线程a、线程b、线程c、线程d为线程池内的线
程,其中,线程a、线程b、线程c、线程d可以在线程池初始化时创建,线程池内线程数量根据系统的负载确定,如果系统负载较大,可以预先启动较多的线程。线程池内各线程对应栈的大小、运行优先级等参数均相同。
59.需要说明的是,线程是操作系统任务调度的基本单元,从操作系统的角度理解,cpu一直在分时执行不同线程的任务,即在不同的线程之间切换。
60.在图3中,任务队列用于缓存待执行任务,在待执行任务插入队列后,线程池的线程可以将待执行任务从队列取出并执行。如图3所示,待执行任务可以从队首依次插入,线程将待执行任务从队尾依次取出。或者,任待执行务也可以从队尾依次插入,线程将待执行任务从队首依次取出(图3未示出),本技术对此不作限制。
61.图3的计数信号量能够用来实现任务队列内的任务生成和消费之间的同步。每插入一个新待执行任务到任务队列,计数信号量的值加1。
62.其中,信号量是操作系统提供的一种同步机制,可以实现资源生产者和消费者之间的同步。资源的生产者释放信号量,资源的消费者消耗信号量,当资源的消费者得不到信号量时,其所在线程就会被阻塞。阻塞后该线程将不会被调度,即不会被cpu执行,直到资源的消费者获取信号量。
63.即线程池中的任何线程从队列中取走一个待执行任务,计数信号量的值减1。得不到信号量的线程将被操作系统阻塞。如特殊情况下,计数信号量的值为0,任务队列中没有待执行任务,所有线程都被阻塞。
64.图3提出的方法,无需直接访问资源,减少访问压力,以较少的算力实现对线程池的监控。具体的,以任务队列为目标管理对象,将任务队列视为一种资源,让线程池中的线程去竞争获取这个资源。线程池中竞争到资源(取得任务队列中的一个任务)的线程得到运行,竞争不到资源的线程被操作系统阻塞,无需额外的线程管理开销,即省去了对线程池中线程状态的管理环节。
65.同时通过定时器组实现了周期性任务的执行,仅使用一个计数信号量便实现了多任务共享有限线程的机制,设置计数信号量的计数值等于任务队列中的任务个数实现监测任务队列的任务状态的目的。举例说明,当任务队列中有3个任务时,计数信号量的值为3,假设线程池中此时因无任务执行而被阻塞线程个数大于等于3,这个时候就有3个线程获取到信号量,即获取到执行任务,从而去执行相应的任务,实现3个线程并发执行3个任务的效果。此时计数信号量的值重置为0。
66.结合图3,在一个实施例中,对创建与操作指令对应的第一待执行任务的过程进行说明。其中,第一待执行任务包括单次执行的任务(即临时性执行任务)和周期性执行的任务(即周期性执行任务)。
67.对于单次执行的任务,直接将单次执行的任务插入到待执行队列的首部即可。在任务插入的同时,计数信号量的值加1。
68.对于周期性执行的任务,可以指定执行周期以及循环执行的执行次数(例如可以是无限多次)。每一个周期性执行的任务绑定有一个对应的定时器,同时,该定时器的定时长度被设置为任务的执行周期,当定时器溢出,该任务会被定时器触发的处理动作加入到线程池待执行队列的队尾,同时将计数信号量值加1。如果线程默认从队尾取任务执行,可以将任务插入到队尾,从而提高定时任务执行周期的精确性。
69.在一个实施例中,结合图3,对删除与操作指令对应的第二待执行任务的过程进行说明。对于任务队列的待执行任务,在还没有任何线程执行之前,可以从队列中删除。
70.对于单次执行的任务:在应用层在添加任务到执行队列时,如果是一次性任务并且添加成功,获取用于标记该任务在队列中位置的变量的返回值,将该任务的执行入口地址保存在队列中。这样,当用户请求删除任务时,可以将添加任务时收到的返回值(上述队列中的位置)和任务的执行入口地址作为请求参数提交,将请求参数中的入口地址和请求参数中的队列位置中保存的位置比较,如果二者相同,则删除该任务,同时将计数信号量的值减1;如果二者不同,则表明该位置已经记录的新的任务,删除失败。
71.对于周期性执行的任务:在应用层添加周期性执行的任务时,获取该周期性任务对应的定时器的地址的返回值,将该周期性任务的执行入口地址保存到对应定时器中。在定时器每次溢出时,将该周期性任务添加到待执行队列的队尾,这样该周期性任务能够尽快被执行。继而,在用户层向本方案发送删除请求时,可以将定时器地址和任务入口地址作为请求参数提交,收到请求后,将用户传入的入口地址和定时器数据中保存的入口地址比较,如果二者相同,则立即产出定时器(即删除与该周期性任务对应的定时器),同时检查待执行队列的队尾,如果队尾任务的入口地址和请求地址相同,则一并将待执行队列的队尾的待执行任务删除并将计数信号量的值减1。
72.进一步的,在一个示例性实施例中,可以预先设置线程池中待执行队列的任务数量的最大值,如果待执行队列的待执行任务的数量达到最大值,则可以拒绝新任务加入,即禁止创建新任务。其中,和任务队列绑定的计数信号量的计数值即为待执行队列的任务数量的最大值。
73.通过上述步骤,提出一种适用于例如计算资源和存储资源受限的场景下的嵌入式系统的任务执行方法,具有结构轻量化的特点,具体将任务队列视为资源,用计数值等于任务队列的任务数量的计数信号量对资源进行保护,由线程池中线程自动获取任务并执行,无需对线程池中的线程做特殊管理,并且支持单次执行型任务和周期性执行型任务,从而提高了任务执行的效率。
74.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本技术各个实施例的方法。
75.图4是根据本技术实施例的一种待执行任务的执行装置的结构框图(一);如图4所示,包括:
76.响应模块42,用于响应于目标对象的执行指令,从线程池内确定已创建的多个线程;
77.确定模块44,用于根据任务队列中所有待执行任务的任务数量确定出所述任务队列的计数信号量,其中,所述计数信号量的计数值与所述任务数量相等;
78.执行模块46,用于在确定所述计数信号量的计数值大于第一预设阈值的情况下,使用所述多个线程执行所述待执行任务。
79.通过上述装置,通过响应于目标对象的执行指令,从线程池内确定已创建的多个线程;根据任务队列中所有待执行任务的任务数量确定出所述任务队列的计数信号量,其中,所述计数信号量的计数值与所述任务数量相等;在确定所述计数信号量的计数值大于第一预设阈值的情况下,使用所述多个线程执行所述待执行任务,解决了相关技术中,在资源受限的运行环境下如何执行任务的技术问题,进而实现在资源受限的运行环境下执行任务。
80.其中,需要说明的是,上述第一预设阈值例如可以为0,那么在确定所述计数信号量的计数值大于0的情况下,可以使用所述多个线程执行所述待执行任务。如果确定所述计数信号量的计数值不大于0,则说明多个线程均为阻塞状态,无法执行待执行任务。
81.例如,在一个实施例中,可以将任务队列确定为目标管理对象,将任务队列视为一种资源,让线程池中的线程竞争获取资源。线程池中竞争到资源(取得任务队列中的一个任务)的线程可以运行,竞争不到资源的线程则被操作系统阻塞,无需额外的线程管理开销,这种方法省去了对线程池中线程状态的管理环节,提高了待执行任务的执行效率。
82.在一个示例性实施例中,进一步的,上述待执行任务的执行装置还包括:获取模块52,如图5所示,图5是根据本技术实施例的一种待执行任务的执行装置的结构框图(二)。获取模块52,用于在根据任务队列中所有的待执行任务的任务数量确定出所述任务队列对应的计数信号量的技术方案之前,获取所述目标对象的操作指令的操作类型;在确定所述操作类型用于指示新增任务的情况下,在所述任务队列中创建与所述操作指令对应的第一待执行任务;在确定所述操作类型用于指示删除任务的情况下,在所述任务队列中删除与所述操作指令对应的第二待执行任务。
83.其中,可选的,对于在所述任务队列中创建与所述操作指令对应的第一待执行任务的步骤,可以理解为满足所述操作类型用于指示新增任务,以及所述计数值大于所述第一预设阈值,才允许在所述任务队列中新建与所述操作指令对应的第一待执行任务。
84.需要说明的是,对于在所述任务队列中删除与所述操作指令对应的第二待执行任务的步骤,可以理解为需满足第二待执行任务没有被任何线程执行,即没有占用计算资源,才允许在所述任务队列中删除与所述操作指令对应的第二待执行任务。
85.在一个示例性实施例中,上述获取模块52,还用于:在确定所述第一待执行任务为周期性执行任务的情况下,获取所述第一待执行任务的执行周期和执行次数;控制定时器按照所述执行周期在所述任务队列中循环创建所述第一待执行任务。
86.其中,可选的,上述获取所述第一待执行任务的执行周期和执行次数例如可以从操作指令中获取,但不限于此。
87.需要说明的是,在确定所述第一待执行任务为周期性执行任务之后,继而创建一个定时器与第一待执行任务绑定,将定时器的定时长度设置为第一待执行任务的执行周期,当定时器溢出,第一待执行任务会被定时器触发的处理动作加入到线程池待执行队列的队尾。
88.在一个示例性实施例中,确定出所述第一待执行任务循环创建的次数,其中,所述第一待执行任务对应最高执行优先级。在所述循环创建的次数大于或等于所述执行次数的情况下,停止在所述任务队列中循环创建所述第一待执行任务。在在所述循环创建的次数小于所述执行次数的情况下,在所述任务队列中循环创建所述第一待执行任务。其中,具有
最高执行优先级的待执行任务为最先执行的待执行任务。
89.对于控制定时器按照所述执行周期在所述任务队列中循环创建所述第一待执行任务的过程,对于循环创建的次数等于所述执行次数的情况,例如执行周期为10分钟,执行次数为3,那么每隔10分钟创建一次第一待执行任务,第一待执行任务经过30分钟后的创建次数为3,则停止循环创建所述第一待执行任务。对于循环创建的次数大于所述执行次数的情况,例如执行周期为10分钟,执行次数为4,那么每隔10分钟创建一次第一待执行任务,第一待执行任务在经过50分钟后的创建次数为5,则停止循环创建所述第一待执行任务。
90.在一个示例性实施例中,上述获取模块52,还用于:通过以下方式确定所述计数信号量的计数值:根据所述第一待执行任务的循环创建的次数确定出所述第一待执行任务的新建任务数量,并将所述新建任务数量确定为所述计数值的增加值;将第一计数值和所述增加值的和值更新为所述计数值,其中,所述第一计数值与所述任务数量一致。
91.在一个示例性实施例中,上述获取模块52,还用于:在确定所述第一待执行任务为临时性执行任务的情况下,在所述任务队列中创建所述第一待执行任务,其中,所述第一待执行任务对应最低执行优先级;通过以下方式确定所述计数信号量的计数值,包括:根据所述第一待执行任务的创建次数确定所述第一待执行任务的新建任务数量,并将所述新建任务数量确定为所述计数值的增加值;将第二计数值和所述增加值的和值更新为所述计数值,其中,所述第二计数值与所述任务数量一致。
92.在一个示例性实施例中,进一步的,上述获取模块52,还用于:在确定所述第二待执行任务为周期性执行任务的情况下,确定出循环创建所述第二待执行任务时用到的定时器,以及所述定时器的第一存储地址;获取所述第二待执行任务的执行入口地址,其中,所述执行入口地址用于表示所述任务队列的第二待执行任务的第二存储地址;在确定所述第一存储地址和所述第二存储地址一致的情况下,删除所述定时器,同时获取所述任务队列内下一个待执行任务的执行入口地址;在确定所述下一个待执行任务的执行入口地址与所述第一存储地址一致的情况下,在所述任务队列中删除与所述操作指令对应的第二待执行任务。
93.在一个示例性实施例中,上述获取模块52,还用于:在确定所述第二待执行任务为临时性执行任务的情况下,获取在创建所述第二待执行任务之后所存储的所述第二待执行任务的第三存储地址;从所述操作指令中获取所述第二待执行任务的执行入口地址,其中,所述执行入口地址用于表示所述任务队列的第二待执行任务的第四存储地址;在确定所述第三存储地址和所述第四存储地址一致的情况下,在所述任务队列中删除与所述操作指令对应的第二待执行任务。
94.在一个示例性实施例中,进一步的,上述获取模块52,还包括任务创建禁止单元,用于:在确定所述操作指令的操作类型之后,进而确定所述计数信号量的计数值是否大于第二预设阈值,其中,所述第二预设阈值大于所述第一预设阈值,用于表示所述待执行任务的最大任务数量;在确定所述计数值大于所述第二预设阈值的情况下,禁止在所述任务队列中创建与所述操作指令对应的第一待执行任务。
95.本技术的实施例还提供了一种存储介质,该存储介质包括存储的程序,其中,上述程序运行时执行上述任一项的方法。
96.可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程
序代码:
97.s1,响应于目标对象的执行指令,从线程池内确定已创建的多个线程;
98.s2,根据任务队列中所有待执行任务的任务数量确定出所述任务队列的计数信号量,其中,所述计数信号量的计数值与所述任务数量相等;
99.s3,在确定所述计数信号量的计数值大于第一预设阈值的情况下,使用所述多个线程执行所述待执行任务。
100.本技术的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
101.可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
102.可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
103.s1,响应于目标对象的执行指令,从线程池内确定已创建的多个线程;
104.s2,根据任务队列中所有待执行任务的任务数量确定出所述任务队列的计数信号量,其中,所述计数信号量的计数值与所述任务数量相等;
105.s3,在确定所述计数信号量的计数值大于第一预设阈值的情况下,使用所述多个线程执行所述待执行任务。
106.可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(read-only memory,简称为rom)、随机存取存储器(random access memory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
107.可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
108.显然,本领域的技术人员应该明白,上述的本技术的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本技术不限制于任何特定的硬件和软件结合。
109.以上所述仅是本技术的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本技术的保护范围。
技术特征:
1.一种待执行任务的执行方法,其特征在于,包括:响应于目标对象的执行指令,从线程池内确定已创建的多个线程;根据任务队列中所有待执行任务的任务数量确定出所述任务队列的计数信号量,其中,所述计数信号量的计数值与所述任务数量相等;在确定所述计数信号量的计数值大于第一预设阈值的情况下,使用所述多个线程执行所述待执行任务。2.根据权利要求1所述的待执行任务的执行方法,其特征在于,在根据任务队列中所有的待执行任务的任务数量确定出所述任务队列对应的计数信号量之前,所述方法还包括:获取所述目标对象的操作指令的操作类型;在确定所述操作类型用于指示新增任务的情况下,在所述任务队列中创建与所述操作指令对应的第一待执行任务;在确定所述操作类型用于指示删除任务的情况下,在所述任务队列中删除与所述操作指令对应的第二待执行任务。3.根据权利要求2所述的待执行任务的执行方法,其特征在于,在所述任务队列中创建与所述操作指令对应的第一待执行任务,包括:在确定所述第一待执行任务为周期性执行任务的情况下,获取所述第一待执行任务的执行周期和执行次数;控制定时器按照所述执行周期在所述任务队列中循环创建所述第一待执行任务。4.根据权利要求3所述的待执行任务的执行方法,其特征在于,通过以下方式确定所述计数信号量的计数值:根据所述第一待执行任务的循环创建的次数确定出所述第一待执行任务的新建任务数量,并将所述新建任务数量确定为所述计数值的增加值;将第一计数值和所述增加值的和值更新为所述计数值,其中,所述第一计数值与所述任务数量一致。5.根据权利要求2所述的待执行任务的执行方法,其特征在于,在所述任务队列中创建与所述操作指令对应的第一待执行任务,包括:在确定所述第一待执行任务为临时性执行任务的情况下,在所述任务队列中创建所述第一待执行任务,其中,所述第一待执行任务对应最低执行优先级;通过以下方式确定所述计数信号量的计数值,包括:根据所述第一待执行任务的创建次数确定所述第一待执行任务的新建任务数量,并将所述新建任务数量确定为所述计数值的增加值;将第二计数值和所述增加值的和值更新为所述计数值,其中,所述第二计数值与所述任务数量一致。6.根据权利要求2所述的待执行任务的执行方法,其特征在于,在所述任务队列中删除与所述操作指令对应的第二待执行任务,包括:在确定所述第二待执行任务为周期性执行任务的情况下,确定出循环创建所述第二待执行任务时用到的定时器,以及所述定时器的第一存储地址;获取所述第二待执行任务的执行入口地址,其中,所述执行入口地址用于表示所述任务队列的第二待执行任务的第二存储地址;
在确定所述第一存储地址和所述第二存储地址一致的情况下,删除所述定时器,同时获取所述任务队列内下一个待执行任务的执行入口地址;在确定所述下一个待执行任务的执行入口地址与所述第一存储地址一致的情况下,在所述任务队列中删除与所述操作指令对应的第二待执行任务。7.根据权利要求2所述的待执行任务的执行方法,其特征在于,在所述任务队列中删除与所述操作指令对应的第二待执行任务,包括:在确定所述第二待执行任务为临时性执行任务的情况下,获取在创建所述第二待执行任务之后所存储的所述第二待执行任务的第三存储地址;从所述操作指令中获取所述第二待执行任务的执行入口地址,其中,所述执行入口地址用于表示所述任务队列的第二待执行任务的第四存储地址;在确定所述第三存储地址和所述第四存储地址一致的情况下,在所述任务队列中删除与所述操作指令对应的第二待执行任务。8.根据权利要求2所述的待执行任务的执行方法,其特征在于,在确定所述操作指令的操作类型之后,所述方法还包括:确定所述计数信号量的计数值是否大于第二预设阈值,其中,所述第二预设阈值大于所述第一预设阈值,用于表示所述待执行任务的最大任务数量;在确定所述计数值大于所述第二预设阈值的情况下,禁止在所述任务队列中创建与所述操作指令对应的第一待执行任务。9.一种待执行任务的执行装置,其特征在于,包括:响应模块,用于响应于目标对象的执行指令,从线程池内确定已创建的多个线程;确定模块,用于根据任务队列中所有待执行任务的任务数量确定出所述任务队列的计数信号量,其中,所述计数信号量的计数值与所述任务数量相等;执行模块,用于在确定所述计数信号量的计数值大于第一预设阈值的情况下,使用所述多个线程执行所述待执行任务。10.一种计算机可读的存储介质,其特征在于,所述计算机可读的存储介质包括存储的程序,其中,所述程序运行时执行上述权利要求1至8任一项中所述的方法。11.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行所述权利要求1至8任一项中所述的方法。
技术总结
本申请公开了一种待执行任务的执行方法、装置、存储介质及电子装置,涉及智慧家庭技术领域,该待执行任务的执行方法包括:响应于目标对象的执行指令,从线程池内确定已创建的多个线程;根据任务队列中所有待执行任务的任务数量确定出所述任务队列的计数信号量,其中,所述计数信号量的计数值与所述任务数量相等;在确定所述计数信号量的计数值大于第一预设阈值的情况下,使用所述多个线程执行所述待执行任务,采用上述技术方案,解决了在资源受限的运行环境下如何执行任务的技术问题。的运行环境下如何执行任务的技术问题。的运行环境下如何执行任务的技术问题。
技术研发人员:薛雄伟
受保护的技术使用者:海尔优家智能科技(北京)有限公司 海尔智家股份有限公司
技术研发日:2023.03.20
技术公布日:2023/7/18
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
上一篇:一种基于姜黄素的聚氨酯材料及其制备方法和应用 下一篇:图案晶圆的正面保护方法
