公开/公告号CN113076131A
专利类型发明专利
公开/公告日2021-07-06
原文格式PDF
申请/专利权人 山东爱拓软件开发有限公司;山东能源集团有限公司;
申请/专利号CN202110370919.X
申请日2021-04-07
分类号G06F8/71(20180101);G06F9/445(20180101);G06F9/54(20060101);G06F11/14(20060101);G06F11/30(20060101);
代理机构11569 北京高沃律师事务所;
代理人杜阳阳
地址 271000 山东省泰安市岱宗大街丽景花园三期商业楼1号楼4`4层15号
入库时间 2023-06-19 11:44:10
技术领域
本发明涉及嵌入式软件系统构建领域,特别是涉及一种基于多进程架构思想的嵌入式软件系统构建方法及系统。
背景技术
嵌入式系统普遍应用于工业控制领域,由于应用场景的不同以及嵌入式系统的硬件性能一般要低于传统计算机系统的现状,所以要求运行其上的应用程序要兼顾高性能和高稳定性,多数情况下应用程序的稳定性更加重要。
当前在嵌入式系统环境下编写复杂的应用程序,大多采用多线程架构,传统开发思路是一个业务逻辑模块占用一个线程,构成具有多项功能的多线程架构的应用软件,一个业务逻辑模块具有一项功能,多个业务逻辑模块之间的各项功能相互调用,因此,此软件架构有以下缺点:
一个业务逻辑模块崩溃(线程)会导致整个应用程序崩溃,最终影响用户的生产工作,产生经济损失。
多个业务逻辑模块(线程)分享一个进程的系统资源(例如内存),使得每个业务逻辑模块(线程)的性能受到较大限制。
发明内容
本发明的目的是提供一种基于多进程架构思想的嵌入式软件系统构建方法及系统,以解决现有的软件架构采用多线程架构时,一个业务逻辑模块崩溃导致整个应用程序崩溃且多个业务逻辑模块分享一个进程的系统资源,使得每个业务逻辑模块的性能受到较大限制的问题。
为实现上述目的,本发明提供了如下方案:
一种基于多进程架构思想的嵌入式软件系统构建方法,包括:
获取实际业务场景,并根据所述实际业务场景构建一个或多个业务逻辑进程;每个所述业务逻辑进程包括多种功能;所述多种功能包括接收启动参数功能、分析启动参数功能、交互信息通道建立功能、交互信息发送功能以及交互信息分析功能;所述业务逻辑进程之间相互独立;
根据所述实际业务场景构建代理进程以及编写代理进程配置文件;所述代理进程配置文件包括业务逻辑进程名称、启动参数、业务逻辑进程守护规则以及消息转发规则;
配置操作系统内应用程序自启动项,使得所述代理进程在所述操作系统启动后自动启动,并重启所述操作系统;
自动启动所述代理进程,所述代理进程根据所述代理进程配置文件启动所述业务逻辑进程;
所述代理进程进入所述业务逻辑进程的守护状态和消息转发状态,构建多进程软件系统。
可选的,所述自动启动所述代理进程,所述代理进程根据所述代理进程配置文件启动所述业务逻辑进程,之后还包括:
利用所述代理进程启动一个或多个所述业务逻辑进程,或者利用所述代理进程守护一个或多个所述业务逻辑进程;
利用所述代理进程处理所述业务逻辑进程发送至所述代理进程的交互信息;
利用所述代理进程转发多个所述业务逻辑进程之间的交互信息。
可选的,所述利用所述代理进程启动一个或多个所述业务逻辑进程,或者利用所述代理进程守护一个或多个所述业务逻辑进程,具体包括:
利用所述代理进程读取所述代理进程配置文件,并构建业务逻辑进程结构体列表;所述业务逻辑进程结构体列表包括多个业务逻辑进程结构体;所述业务逻辑进程结构体内存储有业务逻辑进程名称、启动参数、业务逻辑进程守护规则以及业务逻辑进程与交互信息名称的关联表;
根据所述业务逻辑进程结构体列表依次启动指定路径下的业务逻辑进程,并将所述指定路径下的业务逻辑进程对应的启动参数传递至所述业务逻辑进程,构建所述代理进程与所述业务逻辑进程之间的交互信息通道;
在所述操作系统的支持下,基于所述交互信息通道,利用所述代理进程实时监控所述业务逻辑进程的运行状态。
可选的,所述在所述操作系统的支持下,基于所述交互信息通道,利用所述代理进程实时监控所述业务逻辑进程的运行状态,之后还包括:
当任一所述业务逻辑进程退出后,利用所述代理进程从所述业务逻辑进程结构体列表内查找到与退出的业务逻辑进程相应的业务逻辑进程守护规则;
根据所述业务逻辑进程守护规则,判断所述退出的业务逻辑进程是否需要守护;
若是,利用所述代理进程重新启动所述业务逻辑进程;
若否,所述代理进程不作任何处理。
一种基于多进程架构思想的嵌入式软件系统构建系统,包括:
业务逻辑进程构建模块,用于获取实际业务场景,并根据所述实际业务场景构建一个或多个业务逻辑进程;每个所述业务逻辑进程包括多种功能;所述多种功能包括接收启动参数功能、分析启动参数功能、交互信息通道建立功能、交互信息发送功能以及交互信息分析功能;所述业务逻辑进程之间相互独立;
代理进程构建以及代理进程配置文件编写模块,用于根据所述实际业务场景构建代理进程以及编写代理进程配置文件;所述代理进程配置文件包括业务逻辑进程名称、启动参数、业务逻辑进程守护规则以及消息转发规则;
自启动项配置模块,用于配置操作系统内应用程序自启动项,使得所述代理进程在所述操作系统启动后自动启动,并重启所述操作系统;
代理进程启动模块,用于自动启动所述代理进程,所述代理进程根据所述代理进程配置文件启动所述业务逻辑进程;
多进程软件系统构建模块,用于所述代理进程进入所述业务逻辑进程的守护状态和消息转发状态,构建多进程软件系统。
可选的,还包括:
业务逻辑进程启动/守护模块,用于利用所述代理进程启动一个或多个所述业务逻辑进程,或者利用所述代理进程守护一个或多个所述业务逻辑进程;
交互信息处理模块,用于利用所述代理进程处理所述业务逻辑进程发送至所述代理进程的交互信息;
交互信息转发模块,用于利用所述代理进程转发多个所述业务逻辑进程之间的交互信息。
可选的,所述业务逻辑进程启动/守护模块具体包括:
业务逻辑进程结构体列表构建单元,用于利用所述代理进程读取所述代理进程配置文件,并构建业务逻辑进程结构体列表;所述业务逻辑进程结构体列表包括多个业务逻辑进程结构体;所述业务逻辑进程结构体内存储有业务逻辑进程名称、启动参数、业务逻辑进程守护规则以及业务逻辑进程与交互信息名称的关联表;
交互信息通道构建单元,用于根据所述业务逻辑进程结构体列表依次启动指定路径下的业务逻辑进程,并将所述指定路径下的业务逻辑进程对应的启动参数传递至所述业务逻辑进程,构建所述代理进程与所述业务逻辑进程之间的交互信息通道;
监控单元,用于在所述操作系统的支持下,基于所述交互信息通道,利用所述代理进程实时监控所述业务逻辑进程的运行状态。
可选的,还包括:
查找单元,用于当任一所述业务逻辑进程退出后,利用所述代理进程从所述业务逻辑进程结构体列表内查找到与退出的业务逻辑进程相应的业务逻辑进程守护规则;
判断单元,用于根据所述业务逻辑进程守护规则,判断所述退出的业务逻辑进程是否需要守护;
启动单元,用于当所述退出的业务逻辑进程需要守护时,利用所述代理进程重新启动所述业务逻辑进程;
步骤返回单元,用于当所述退出的业务逻辑进程不需要守护时,所述代理进程不作任何处理。
根据本发明提供的具体实施例,本发明公开了以下技术效果:本发明提供了一种基于多进程架构思想的嵌入式软件系统构建方法及系统,根据所述实际业务场景构建一个或多个业务逻辑进程,每个所述业务逻辑进程包括多种功能,所述多种功能包括接收启动参数功能、分析启动参数功能、交互信息通道建立功能、交互信息发送功能以及交互信息分析功能,一个业务逻辑进程占用一个进程,所述业务逻辑进程之间相互独立,即使一个业务逻辑进程崩溃也不影响整个应用程序的运行,且由于每个业务逻辑进程彼此独立,无需共享同一进程的系统资源,每个进程独享4G的内存空间,内存多了,程序性能增强,使得业务逻辑进程的性能发挥到最大值;并根据实际业务场景构建代理进程以及编写代理进程配置文件,基于该代理进程配置文件,所述代理进程实时监控该业务逻辑进程的运行状态,从而及时守护所述业务逻辑进程。本发明将传统的一个具有多项功能的多线程架构的应用软件重新规划构建成由一个代理进程、一个或者多个业务逻辑进程组成的多进程架构的软件系统,有效提高了业务逻辑进程的运行效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明所提供的基于多进程架构思想的嵌入式软件系统构建方法流程图;
图2为本发明所提供的基于多进程架构思想的嵌入式软件系统构建系统结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的目的是提供一种基于多进程架构思想的嵌入式软件系统构建方法及系统,不受单一业务逻辑进程崩溃的影响,提高业务逻辑进程的运行效率,以及使得业务逻辑进程的性能发挥到最大值。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
在本发明中的缩略语和关键术语定义如下:
嵌入式系统:嵌入式系统由硬件和软件组成,是能够独立进行运作的器件。
进程:计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
线程:操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。
QT技术:1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。
JSON:一种轻量级的数据交换格式。
Agent:代理进程。
Worker:业务逻辑进程。
Msg:Agent与Worker之间交互的消息。
UDP:Internet协议集支持一个无连接的传输协议,该协议称为用户数据报协议。
SOCKET套接字:对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。
图1为本发明所提供的基于多进程架构思想的嵌入式软件系统构建方法流程图,如图1所示,一种基于多进程架构思想的嵌入式软件系统构建方法,包括:
步骤101:获取实际业务场景,并根据所述实际业务场景构建一个或多个业务逻辑进程;每个所述业务逻辑进程包括多种功能;所述多种功能包括接收启动参数功能、分析启动参数功能、交互信息通道建立功能、交互信息发送功能以及交互信息分析功能;所述业务逻辑进程之间相互独立。
业务逻辑进程指为完成某项或多项特定工作的应用程序(例如读取键盘输入),不同的业务场景需要构建不同的Worker,可以有可视的用户界面,也可以是没有用户界面。
Worker构建后应具有如下能力:
具有接收和分析Agent传递的启动参数的能力。
具有与Agent建立Msg通道的能力。
具有向Agent发送Msg的能力。
具有接收来自Agent的Msg并分析此Msg的能力。
Msg是短小的字符串(utf-8编码),单个消息最好控制在2048个字节之内,符合JSON规范。每一条消息基本格式都是JSONOBJECT类型(JSON规范中的数据类型),并且格式固定,便于统一解析,具体格式如下:{"msgname":{xxx:xxx,yyy:yyy}}如果没有消息内容也要符合上述格式要求,例如:{"msgname":{}},这是一个符合JSON规范要求的最简单消息内容。
步骤102:根据所述实际业务场景构建代理进程以及编写代理进程配置文件;所述代理进程配置文件包括业务逻辑进程名称、启动参数、业务逻辑进程守护规则以及消息转发规则。
代理进程负责对一个或者多个Worker的启动和守护(程序崩溃重启);处理Worker发送给Agent的Msg或者转发Worker之间的Msg,从而实现不同Worker之间的通信以及对Worker的管理。
代理进程采用QT技术开发,可以做到跨平台(window平台和linux平台),不需要重复编码。嵌入式系统启动后自动启动代理进程(通过配置操作系统启动参数或者将代理进程配置成守护进程)。
Agent配置文件包含Worker的名称、启动参数、Worker守护规则、消息转发规则等信息,文件内容符合JSON规范。
例如:
procname:Worker名称。
guard:守护规则,0:不守护1:守护(Agent负责重启进程)。
cmd:启动参数。
auto:0:代理进程启动时不启动此进程1:代理进程启动时自动启动此进程。
spmsg:此Worker负责受理的消息名称列表。注意:一个消息可以有多个受理进程。
步骤103:配置操作系统内应用程序自启动项,使得所述代理进程在所述操作系统启动后自动启动,并重启所述操作系统。
步骤104:自动启动所述代理进程,所述代理进程根据所述代理进程配置文件启动所述业务逻辑进程。
所述步骤104之后还包括:利用所述代理进程启动一个或多个所述业务逻辑进程,或者利用所述代理进程守护一个或多个所述业务逻辑进程;利用所述代理进程处理所述业务逻辑进程发送至所述代理进程的交互信息;利用所述代理进程转发多个所述业务逻辑进程之间的交互信息。
所述利用所述代理进程启动一个或多个所述业务逻辑进程,或者利用所述代理进程守护一个或多个所述业务逻辑进程,具体包括:利用所述代理进程读取所述代理进程配置文件,并构建业务逻辑进程结构体列表;所述业务逻辑进程结构体列表包括多个业务逻辑进程结构体;所述业务逻辑进程结构体内存储有业务逻辑进程名称、启动参数、业务逻辑进程守护规则以及业务逻辑进程与交互信息名称的关联表;根据所述业务逻辑进程结构体列表依次启动指定路径下的业务逻辑进程,并将所述指定路径下的业务逻辑进程对应的启动参数传递至所述业务逻辑进程,构建所述代理进程与所述业务逻辑进程之间的交互信息通道;在所述操作系统的支持下,基于所述交互信息通道,利用所述代理进程实时监控所述业务逻辑进程的运行状态。
关于Worker的启动和守护:
Agent启动后,会读取Agent配置文件,会根据配置文件中规定的规则启动一个或者多个指定的Worker。Worker是作为Agent的子进程存在的,Agent作为父进程是可以感知子进程的状态(这是操作系统支持的),所以当Worker退出后,Agent就可以感知到,就可以重启Worker,这实现了守护功能。
所述在所述操作系统的支持下,基于所述交互信息通道,利用所述代理进程实时监控所述业务逻辑进程的运行状态,之后还包括:
当任一所述业务逻辑进程退出后,利用所述代理进程从所述业务逻辑进程结构体列表内查找到与退出的业务逻辑进程相应的业务逻辑进程守护规则;
根据所述业务逻辑进程守护规则,判断所述退出的业务逻辑进程是否需要守护;
若是,利用所述代理进程重新启动所述业务逻辑进程;
若否,所述代理进程不作任何处理。
接下来将对Worker的启动和守护流程进行阐述:
(1)Agent读取配置文件,在内存中建立Worker结构体列表,结构体中存储Worker的名称、启动参数、守护规则、Worker与Msg名称的关联表等。
(2)Agent根据Worker结构体列表依次启动指定路径下的Worker,并将相关启动参数传递给这些Worker。
(3)完成Agent与Worker之间Msg通道的建立。
(4)在操作系统的支持下,Agent可以实时监控Worker的运行状态。
当某个Worker退出后,Agent可以马上感知,此时从Worker结构体列表查找其相应的守护规则,如果需要守护,则Agent重新启动此Worker,并从步骤(2)开始执行;如果不需要守护则不作任何处理。
所述利用所述代理进程转发多个所述业务逻辑进程之间的交互信息,具体包括:
Agent启动后,会读取Agent配置文件,获取Worker能够处理的Msg名称,建立Worker与Msg名称的关联表;同时建立本地UDP的SOCKET套接字,并随机绑定一个空闲的端口号,实时监听Worker发送的Msg,此端口号会以启动参数的方式传递给Worker,Worker启动后会将Worker的UDP的端口号以Msg的形式告知Agent,这样Agent与Worker之间的Msg通道就建立好了。
Msg通道建立成功后,Agent就可以进行消息转发,其流程如下:
Worker1发送名字为xxx的Msg1。
Msg1通过建立好的Msg通道发送给Agent。
Agent查找内存中的Worker与Msg名称关联表,找到能够处理Msg1的Worker2、Worker3等。
对Msg1进行预处理,例如此时Worker2没有启动,则先根据Worker2的启动规则启动Worker2(参考Worker启动和守护流程)。
通过Agent与Worker2、Worker3等预先建立好的Msg通道,将Msg1转发给这些Worker。
步骤105:所述代理进程进入所述业务逻辑进程的守护状态和消息转发状态,构建多进程软件系统。
Agent、Worker和Agent配置文档构建完成后,必须按照指定路径进行部署。
以Linux系统举例:
#define GB_AI_ROOT/home/orangepi/ait运行环境根目录(举例)
GB_AI_ROOT/clientagent 代理进程路径
GB_AI_ROOT/worker1/worker1 worker1路径
GB_AI_ROOT/worker2/worker2 worker2路径
Agent在运行环境根目录下,根据Worker名称到同名目录下启动同名进程。
综上,将本发明的构建方法应用至实际中,具体步骤如下:
(1)根据实际业务场景规划构建一个或者多个Work。
(2)根据实际业务场景编写Agent配置文件。
(3)进行系统发布,即Agent、Worker和Agent配置文件构建完成后,按照指定路径进行部署。Agent、Worker和Agent配置文件按照指定路径进行部署,Agent的路径是“GB_AI_ROOT/clientagent”;Agent配置文件与Agent在相同目录下;例如名字为“work1”的业务逻辑进程的路径为“GB_AI_ROOT/worker1/worker1”。
(4)配置操作系统应用程序自启动项,使Agent能够在操作系统启动后能够自动启动。
(5)重启操作系统。
(6)Agent自动启动。
(7)Agent根据Agent配置文件内容,启动Worker。
(8)Agent进入Worker守护状态和消息转发状态。
(9)多进程软件系统构建完成。
图2为本发明所提供的基于多进程架构思想的嵌入式软件系统构建系统结构图,如图2所示,一种基于多进程架构思想的嵌入式软件系统构建系统,包括:
业务逻辑进程构建模块201,用于获取实际业务场景,并根据所述实际业务场景构建一个或多个业务逻辑进程;每个所述业务逻辑进程包括多种功能;所述多种功能包括接收启动参数功能、分析启动参数功能、交互信息通道建立功能、交互信息发送功能以及交互信息分析功能;所述业务逻辑进程之间相互独立。
代理进程构建以及代理进程配置文件编写模块202,用于根据所述实际业务场景构建代理进程以及编写代理进程配置文件;所述代理进程配置文件包括业务逻辑进程名称、启动参数、业务逻辑进程守护规则以及消息转发规则。
自启动项配置模块203,用于配置操作系统内应用程序自启动项,使得所述代理进程在所述操作系统启动后自动启动,并重启所述操作系统。
代理进程启动模块204,用于自动启动所述代理进程,所述代理进程根据所述代理进程配置文件启动所述业务逻辑进程。
多进程软件系统构建模块205,用于所述代理进程进入所述业务逻辑进程的守护状态和消息转发状态,构建多进程软件系统。
本发明还包括:业务逻辑进程启动/守护模块,用于利用所述代理进程启动一个或多个所述业务逻辑进程,或者利用所述代理进程守护一个或多个所述业务逻辑进程;交互信息处理模块,用于利用所述代理进程处理所述业务逻辑进程发送至所述代理进程的交互信息;交互信息转发模块,用于利用所述代理进程转发多个所述业务逻辑进程之间的交互信息。
所述业务逻辑进程启动/守护模块具体包括:业务逻辑进程结构体列表构建单元,用于利用所述代理进程读取所述代理进程配置文件,并构建业务逻辑进程结构体列表;所述业务逻辑进程结构体列表包括多个业务逻辑进程结构体;所述业务逻辑进程结构体内存储有业务逻辑进程名称、启动参数、业务逻辑进程守护规则以及业务逻辑进程与交互信息名称的关联表;交互信息通道构建单元,用于根据所述业务逻辑进程结构体列表依次启动指定路径下的业务逻辑进程,并将所述指定路径下的业务逻辑进程对应的启动参数传递至所述业务逻辑进程,构建所述代理进程与所述业务逻辑进程之间的交互信息通道;监控单元,用于在所述操作系统的支持下,基于所述交互信息通道,利用所述代理进程实时监控所述业务逻辑进程的运行状态。
本发明还包括:查找单元,用于当任一所述业务逻辑进程退出后,利用所述代理进程从所述业务逻辑进程结构体列表内查找到与退出的业务逻辑进程相应的业务逻辑进程守护规则;判断单元,用于根据所述业务逻辑进程守护规则,判断所述退出的业务逻辑进程是否需要守护;启动单元,用于当所述退出的业务逻辑进程需要守护时,利用所述代理进程重新启动所述业务逻辑进程;步骤返回单元,用于当所述退出的业务逻辑进程不需要守护时,所述代理进程不作任何处理。
本发明在多进程架构下,每个业务逻辑模块独占一个进程,相比多线程架构拥有以下优点:
降低程序设计复杂度,易于维护和并行开发。
每个进程互相独立,一个模块崩溃,不会影响整个应用系统的运行,增强系统健壮性。
每个模块进程能获得更多的系统资源,能够发挥出更大的性能。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。
机译: 一种基于指针的对象获取方法,用于对计算机系统的信息进行有形处理,该方法基于一种自然语言,并且该机器人或机器人的人工智能系统对该计算机系统的接收信号作出反应,该计算机系统具有相应的关联机器人或机器人的人工智能,该机器人或机器人的人工智能计算机系统的相应思想得到证实
机译: 开发架构框架中用于系统构建技术的系统,方法和制品
机译: 开发架构框架中用于系统构建技术的系统,方法和制品