
1.本发明涉及计算机技术领域,尤其涉及一种实时多任务下发方法、装置、电子设备及存储介质。
背景技术:2.现有linux操作系统,通常采用contab任务系统,其通过繁琐的配置文件才能将任务运行起来,大多数为shell文件,只存在分钟、小时、每天等定时执行方式,无法完成秒级多任务运行。并且现有linux操作系统对同时运行的主进程的数量有限制,导致在多任务运行情况下任务处理效率较低。
技术实现要素:3.有鉴于此,本发明实施例提供一种能够实现秒级多任务运行,任务处理效率高的实时多任务下发方法、装置、电子设备及存储介质。
4.第一方面,本发明实施例提供一种实时多任务下发方法,用于linux操作系统,包括:
5.获取预设数量的待运行的任务;
6.根据所述任务的数量,获取相同数量的数据库线程池句柄,其中所述linux操作系统与服务器预先建立有若干tcp连接,所述数据库线程池句柄指向所述tcp连接中空闲的tcp连接;
7.根据所述任务的数量,将当前主进程分支出相同数量的子进程,以使每个子进程分别用于运行一个任务,并为每个子进程分配一个数据库线程池句柄;
8.将分支出的子进程及对应的数据库线程池句柄挂载至所述linux操作系统,由所述linux操作系统进行运行。
9.结合第一方面,在第一方面的一种实施方式中,所述获取预设数量的待运行的任务,包括:
10.从任务队列中获取预设数量的待运行的任务,所述任务队列为异步持久化内存队列;
11.所述将分支出的子进程及对应的数据库线程池句柄挂载至所述linux操作系统,由所述linux操作系统进行运行,之后包括:
12.当子进程运行完毕后,将其对应的任务从所述任务队列中删除。
13.结合第一方面,在第一方面的另一种实施方式中,所述将分支出的子进程及对应的数据库线程池句柄挂载至所述linux操作系统,由所述linux操作系统进行运行,包括:
14.每个子进程运行时,将其当前任务执行状态写入预先设立的进程运行状态寄存器。
15.结合第一方面,在第一方面的再一种实施方式中,所述将分支出的子进程及对应的数据库线程池句柄挂载至所述linux操作系统,由所述linux操作系统进行运行,之后包
括:
16.当需要变更任务时,向所述进程运行状态寄存器写入任务变更请求;
17.周期性读取所述进程运行状态寄存器,根据其中的任务变更请求对相应子进程进行处理。
18.第二方面,本发明实施例提供一种实时多任务下发装置,用于linux操作系统,包括:
19.第一获取模块,用于获取预设数量的待运行的任务;
20.第二获取模块,用于根据所述任务的数量,获取相同数量的数据库线程池句柄,其中所述linux操作系统与服务器预先建立有若干tcp连接,所述数据库线程池句柄指向所述tcp连接中空闲的tcp连接;
21.分支模块,用于根据所述任务的数量,将当前主进程分支出相同数量的子进程,以使每个子进程分别用于运行一个任务,并为每个子进程分配一个数据库线程池句柄;
22.挂载模块,用于将分支出的子进程及对应的数据库线程池句柄挂载至所述linux操作系统,由所述linux操作系统进行运行。
23.结合第二方面,在第二方面的一种实施方式中,所述第一获取模块,包括:
24.获取单元,用于从任务队列中获取预设数量的待运行的任务,所述任务队列为异步持久化内存队列;
25.所述装置还包括:
26.删除模块,用于当子进程运行完毕后,将其对应的任务从所述任务队列中删除。
27.结合第二方面,在第二方面的另一种实施方式中,所述分支模块,包括:
28.写入单元,用于每个子进程运行时,将其当前任务执行状态写入预先设立的进程运行状态寄存器。
29.结合第二方面,在第二方面的再一种实施方式中,所述装置还包括:
30.写入模块,用于当需要变更任务时,向所述进程运行状态寄存器写入任务变更请求;
31.处理模块,用于周期性读取所述进程运行状态寄存器,根据其中的任务变更请求对相应子进程进行处理。
32.第三方面,本发明实施例提供一种电子设备,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一所述的方法。
33.第四方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述任一所述的方法。
34.本发明实施例提供的实时多任务下发方法、装置、电子设备及存储介质,用于linux操作系统,首先获取预设数量的待运行的任务,然后根据所述任务的数量,获取相同数量的数据库线程池句柄,其中所述linux操作系统与服务器预先建立有若干tcp连接,所述数据库线程池句柄指向所述tcp连接中空闲的tcp连接,之后根据所述任务的数量,将当
前主进程分支出相同数量的子进程,以使每个子进程分别用于运行一个任务,并为每个子进程分配一个数据库线程池句柄,最后将分支出的子进程及对应的数据库线程池句柄挂载至所述linux操作系统,由所述linux操作系统进行运行。这样,本发明实施例将任务转换为进程后直接挂载至操作系统,无需使用linux操作系统的contab任务系统,能够实现秒级多任务运行;并且本发明实施例为每个任务分配一个子进程,而非分配一个主进程,这样能够规避系统对主进程数量的限制,并发运行多个任务,大大提高任务处理效率;此外本发明实施例能够一次运行预设数量的子进程/任务,能够解决现有技术中任务执行过多,大量占用数据库资源问题。
附图说明
35.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
36.图1为本发明的实时多任务下发方法实施例的流程图;
37.图2为本发明的实时多任务下发方法实施例的原理图;
38.图3为本发明的实时多任务下发装置实施例的结构示意图;
39.图4为本发明电子设备实施例的结构示意图。
具体实施方式
40.下面结合附图对本发明实施例进行详细描述。
41.应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
42.一方面,本发明实施例提供一种实时多任务下发方法,用于linux操作系统,如图1所示,本实施例的方法可以包括:
43.步骤101:获取预设数量的待运行的任务;
44.本步骤中,待运行的任务可以来源于终端流量设备上报的日志数据,终端流量设备包括但不限于防火墙、硬件、软件、系统操作、网络通联等,每条日志数据对应一个任务。待运行的任务可能有很多,难以一次运行完毕,故可以每次获取预设数量的待运行的任务,预设数量可以根据情况灵活设置,例如可以为3个、4个、5个或更多等。
45.图2为本发明的实时多任务下发方法实施例的原理图,本步骤基本对应于图2中的“任务队列分发模块”。
46.步骤102:根据所述任务的数量,获取相同数量的数据库线程池句柄,其中所述linux操作系统与服务器预先建立有若干tcp连接,所述数据库线程池句柄指向所述tcp连接中空闲的tcp连接;
47.本步骤中,根据待运行的任务的数量,具体可以从预先建立的数据库线程池中获取相同数量的数据库线程池句柄;数据库线程池中可以存储有正在运行的线程及其所使用的数据库线程池句柄、以及空闲的数据库线程池句柄。
48.本步骤中,linux操作系统与服务器预先建立有若干tcp连接,这样能够大量减少创建tcp连接所需的时间,减少服务器数据库服务连接压力,增加程序处理速度,并发执行不同种类任务。每个数据库线程池句柄即指向建立的每个tcp连接,空闲的数据库线程池句柄即指向空闲的tcp连接;本步骤中,获取的即是空闲的数据库线程池句柄,从而为后续子进程分配一可用的数据库线程池句柄,便于子进程与服务器的数据库进行交互、运行完毕后将运行结果写入服务器的数据库中等。
49.步骤103:根据所述任务的数量,将当前主进程分支出相同数量的子进程,以使每个子进程分别用于运行一个任务,并为每个子进程分配一个数据库线程池句柄;
50.本步骤中,根据待运行的任务的数量,将当前主进程分支(fork)出相同数量的子进程,以使每个子进程分别用于运行一个任务,并为每个子进程分配一个数据库线程池句柄,数据库线程池句柄便于子进程与服务器的数据库进行交互、运行完毕后将运行结果写入服务器的数据库中等。
51.本步骤中,为每个任务分配一个子进程,而非分配一个主进程,这样能够规避系统对主进程数量的限制,大大提高任务处理效率。
52.步骤104:将分支出的子进程及对应的数据库线程池句柄挂载至所述linux操作系统,由所述linux操作系统进行运行。
53.上述步骤103-104基本对应于图2中的“进程任务挂载模块”、“操作系统任务挂载”,在图2中,共分支出了5个子进程,分别用于执行任务一、任务二、任务三、任务四和任务五。可以想到的是,当子进程运行完毕后,可以释放子进程资源,重新执行上述步骤101-104,从而继续处理其他待运行的任务。
54.现有技术中,特殊情况下,如服务器断电、服务器重新启动,会导致任务丢失、重复处理数据等问题。为解决该问题,作为一种可选的实施例,所述获取预设数量的待运行的任务(步骤101),可以包括:
55.步骤1011:从任务队列中获取预设数量的待运行的任务,所述任务队列为异步持久化内存队列;在图2中,任务队列即为系统日志队列;
56.同时,所述将分支出的子进程及对应的数据库线程池句柄挂载至所述linux操作系统,由所述linux操作系统进行运行(步骤104),之后可以包括:
57.步骤105:当子进程运行完毕后,将其对应的任务从所述任务队列中删除。
58.这样,任务队列中存储的任务即是没有处理完毕的任务,即使遇到服务器断电、服务器重新启动等特殊情况,重新执行任务即可,有效避免了任务丢失、重复处理数据等问题。
59.作为另一种可选的实施例,所述将分支出的子进程及对应的数据库线程池句柄挂载至所述linux操作系统,由所述linux操作系统进行运行(步骤104),可以包括:
60.步骤1041:每个子进程运行时,将其当前任务执行状态写入预先设立的进程运行状态寄存器。
61.本步骤中,进程运行状态寄存器对应于图2中的“进程运行状态”,进程运行状态寄存器为专门设立,非系统进程状态,这样能够更好的监控各子进程(任务)的运行状态。子进程的当前任务执行状态可以包括运行中、运行完毕等。
62.作为再一种可选的实施例,所述将分支出的子进程及对应的数据库线程池句柄挂
载至所述linux操作系统,由所述linux操作系统进行运行(步骤104),之后可以包括:
63.步骤105’:当需要变更任务时,向所述进程运行状态寄存器写入任务变更请求;
64.本步骤中,任务变更请求可以是任务暂停、重启、撤销等。
65.步骤106’:周期性读取所述进程运行状态寄存器,根据其中的任务变更请求对相应子进程进行处理。
66.本步骤中,通过周期性读取进程运行状态寄存器,当其中有任务变更请求时,根据任务变更请求对相应子进程进行相应处理(暂停、重启、撤销等)。可以想到的是,任务变更请求也可以作为当前任务执行状态直接写入所述进程运行状态寄存器,这样步骤106’就可以是周期性读取进程运行状态寄存器,根据进程运行状态对子进程进行处理,处理完毕后,可以做上处理完毕标记,以避免重复处理。上述步骤105
’‑
106’可实现多任务实时暂停、重启、撤销等功能。
67.上述步骤106’对应于图2中的“进程控制器”。可以想到的是,步骤106’还可以包括:
68.步骤1061’:将所述进程运行状态寄存器中的进程状态与系统进程状态进行比较;
69.步骤1062’:若不一致,则将进程运行状态寄存器中的进程状态更新为系统进程状态;或者,若系统进程状态中无相应子进程信息,则重新将相应子进程及其对应的数据库线程池句柄挂载至所述linux操作系统,由所述linux操作系统进行运行。
70.上述步骤1061
’‑
1062’,能够较好的解决进程运行过程中存在的异常情况。
71.综上,本发明实施例提供的实时多任务下发方法,用于linux操作系统,首先获取预设数量的待运行的任务,然后根据所述任务的数量,获取相同数量的数据库线程池句柄,其中所述linux操作系统与服务器预先建立有若干tcp连接,所述数据库线程池句柄指向所述tcp连接中空闲的tcp连接,之后根据所述任务的数量,将当前主进程分支出相同数量的子进程,以使每个子进程分别用于运行一个任务,并为每个子进程分配一个数据库线程池句柄,最后将分支出的子进程及对应的数据库线程池句柄挂载至所述linux操作系统,由所述linux操作系统进行运行。这样,本发明实施例将任务转换为进程后直接挂载至操作系统,无需使用linux操作系统的contab任务系统,能够实现秒级多任务运行;并且本发明实施例为每个任务分配一个子进程,而非分配一个主进程,这样能够规避系统对主进程数量的限制,并发运行多个任务,大大提高任务处理效率;此外本发明实施例能够一次运行预设数量的子进程/任务,能够解决现有技术中任务执行过多,大量占用数据库资源问题。
72.另一方面,本发明实施例提供一种实时多任务下发装置,用于linux操作系统,如图3所示,该装置可以包括:
73.第一获取模块11,用于获取预设数量的待运行的任务;
74.第二获取模块12,用于根据所述任务的数量,获取相同数量的数据库线程池句柄,其中所述linux操作系统与服务器预先建立有若干tcp连接,所述数据库线程池句柄指向所述tcp连接中空闲的tcp连接;
75.分支模块13,用于根据所述任务的数量,将当前主进程分支出相同数量的子进程,以使每个子进程分别用于运行一个任务,并为每个子进程分配一个数据库线程池句柄;
76.挂载模块14,用于将分支出的子进程及对应的数据库线程池句柄挂载至所述linux操作系统,由所述linux操作系统进行运行。
77.本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
78.优选的,所述第一获取模块11,包括:
79.获取单元,用于从任务队列中获取预设数量的待运行的任务,所述任务队列为异步持久化内存队列;
80.所述装置还包括:
81.删除模块,用于当子进程运行完毕后,将其对应的任务从所述任务队列中删除。
82.优选的,所述分支模块13,包括:
83.写入单元,用于每个子进程运行时,将其当前任务执行状态写入预先设立的进程运行状态寄存器。
84.优选的,所述装置还包括:
85.写入模块,用于当需要变更任务时,向所述进程运行状态寄存器写入任务变更请求;
86.处理模块,用于周期性读取所述进程运行状态寄存器,根据其中的任务变更请求对相应子进程进行处理。
87.本发明实施例还提供一种电子设备,图4为本发明电子设备一个实施例的结构示意图,可以实现本发明图1所示实施例的流程,如图4所示,上述电子设备可以包括:壳体41、处理器42、存储器43、电路板44和电源电路45,其中,电路板44安置在壳体41围成的空间内部,处理器42和存储器43设置在电路板44上;电源电路45,用于为上述电子设备的各个电路或器件供电;存储器43用于存储可执行程序代码;处理器42通过读取存储器43中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一方法实施例所述的方法。
88.处理器42对上述步骤的具体执行过程以及处理器42通过运行可执行程序代码来进一步执行的步骤,可以参见本发明图1所示实施例的描述,在此不再赘述。
89.该电子设备以多种形式存在,包括但不限于:
90.(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iphone)、多媒体手机、功能性手机,以及低端手机等。
91.(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:pda、mid和umpc设备等,例如ipad。
92.(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如ipod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。
93.(4)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
94.(5)其他具有数据交互功能的电子设备。
95.本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一方法实施例所述的方法步骤。
96.本发明的实施例还提供一种应用程序,所述应用程序被执行以实现本发明任一方法实施例提供的方法。
97.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
98.本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。
99.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,rom)或随机存储记忆体(random access memory,ram)等。
100.以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。