本发明涉及工程软件技术领域,具体涉及一种用于控制工程软件的脚本执行速度提升方法及装置。
背景技术:
近年来,移动互联网、物联网、人工智能等相关领域的快速发展带动了数据爆发式地增长。无论是传统业务系统中的关系型数据,还是复杂多变的非结构化数据,我们能够利用的数据种类越来越多,数据量也越来越大,而数据量的增加直接导致了脚本数量庞大、逻辑复杂、难于管理等问题,脚本执行速度随之降低。
脚本语言是一种解释性语言,脚本程序是顺序执行的,由于系统功能的复杂性,多种不同的业务同时执行,或者有多个用户在同时使用同一种业务,所以需要多次读取脚本存放的位置,并分析业务脚本,而曾经被激活的业务逻辑没有被重复的利用。并发是业务对系统环境的一个重要要求,也是影响系统性能的一个重要因素,但是现有技术不能高效的实现业务脚本的并发处理。因此,为了提高脚本的执行速度,需要从编译脚本、执行脚本、接口等方面进行优化。
技术实现要素:
本发明为了克服现有技术脚本执行速度慢的缺陷,提供了一种用于控制工程软件的脚本执行速度提升方法,还提供了一种用于控制工程软件的脚本执行速度提升装置。
本发明克服其技术问题所采用的技术方案是:
一种用于控制工程软件的脚本执行速度提升方法,包括:
步骤s1、重构脚本框架,创建脚本解析器;
步骤s2、编译脚本,使用hash表查找方法;
步骤s3、执行脚本,通过数组下标直接获取函数,并判断是否需要调用外部模块:如需调用,则根据需求调用事件模块、报表模块、sql数据库模块和配方模块中的一种或几种,之后再跳转至下一步;如不需调用,直接跳转至下一步;
步骤s4、获取执行结果;
步骤s5、根据用户需求销毁脚本解析器或返回步骤s2重新执行脚本解析器。
进一步地,所述步骤s1具体包括:重构脚本框架,使用虚拟机寄存器架构代替栈式架构。
进一步地,步骤s3之后还包括步骤s3',判断脚本的编译和执行是否报错:
若脚本报错,根据c 抛错机制进行精准定位,并修改脚本,然后跳转至步骤s2重新执行;
若脚本没有报错,直接跳转至步骤s4。
进一步地,步骤s5之后还包括,对脚本解析器进行性能测试,具体测试方法为:使用while对脚本局部变量进行脚本性能测试。
本发明还提供了一种用于控制工程软件的脚本执行速度提升装置,至少包括:
实现架构模块,用于重构脚本框架,创建脚本解析器;
扩展函数模块,用于编译脚本和执行脚本,其中,编译脚本时,使用hash表查找方法,执行脚本时,通过数组下标直接获取函数且获取当前运行环境相关参数;还用于调用外部模块,其中,外部模块包括事件模块、报表模块、sql数据库模块和配方模块;
运算指令模块,设于脚本解析器中,用于重新定义目标代码指令集,增加专门的运算符指令,其中,专门的运算符指令至少包括算术运算符指令、比较运算符指令、连接运算符指令和逻辑运算符指令;
内存管理模块,用于自定义内存申请或释放接口,根据需要切换模式;还增加了内存管理回收机制,用于在每次循环后清除脚本执行产生的内存。
进一步地,所述用于控制工程软件的脚本执行速度提升装置还包括异常处理模块,用于判断脚本的编译和执行是否报错,并使用c 抛错机制定位具体错误位置。
进一步地,所述实现架构模块,还增加了变量类型,至少包括数组、字典和函数引用;还规范化变量作用域,变量查找先后顺序按照局部变量-全局变量-系统记录点排列。
进一步地,所述扩展函数模块中,扩展函数接口提供所有函数信息的结构,函数参数统一只有一个指针,指向该脚本执行信息结构和当前运行环境相关参数;编译时使用hash表查找,执行时通过数组下标直接获取函数。
进一步地,所述内存管理模块中,自定义内存申请或释放接口时,使用宏定义切换内存申请方式,包括debug模式、std模式或自定义模式,其中,自定义模块至少包括使用开放源代码的第三方内存管理库。
进一步地,所述内存管理模块中,增加了内存管理回收机制,使得每个脚本独立对所有申请的内存使用链表进行管理,统一对申请的内存进行扫描,释放无引用内存。
本发明的有益效果是:
本发明通过对实现架构模块、扩展函数模块、运算指令模块、内存管理模块和异常处理模块多方面进行优化改进,使得解析器执行速度更快,加快了脚本的编译速度和执行速度,加快了内存清理的速度,使得脚本的执行速度显著提升,且高效地实现了业务脚本的并发处理。
附图说明
图1为本发明实施例所述的用于控制工程软件的脚本执行速度提升方法的流程图。
具体实施方式
为了便于本领域人员更好的理解本发明,下面结合附图和具体实施例对本发明做进一步详细说明,下述仅是示例性的不限定本发明的保护范围。
实施例1、
如图1所示,本实施例提供了一种用于控制工程软件的脚本执行速度提升装置,至少包括实现架构模块、扩展函数模块、运算指令模块和内存管理模块。其中:
本实施例中,所述实现架构模块,用于重构脚本框架,创建脚本解析器,使用虚拟机寄存器架构代替栈式架构,使得解析器执行速度更快,减少重复计算造成的开销,增加了控制工程软件的可用性;还增加了变量类型,至少包括数组、字典和函数引用;还规范化变量作用域,变量查找先后顺序按照局部变量-全局变量-系统记录点(从里到外)排列,并且内部定义的变量只能内部使用。其中,脚本解析器用于后台执行脚本程序,是一种可执行文件;脚本解析器具有读/写实时数据库记录点、对脚本进行基本运算/函数运算等功能;脚本解释器支持基本运算及基本函数库,可以嵌入到程序里由用户动态配置自己的程序;另外,脚本本身没有并发处理功能,可以开多个脚本解析器同时执行脚本(可以是同一脚本也可以是不同脚本)以便高效地实现业务脚本的并发处理。
本实施例中,所述扩展函数模块,用于编译脚本和执行脚本,其中,扩展函数接口提供所有函数信息的结构,函数参数统一只有一个指针,指向该脚本执行信息结构和当前运行环境相关参数,编译脚本时,使用hash表查找方法,可以加速其查询速度,执行脚本时,通过数组下标直接获取函数且获取当前运行环境相关参数,可以提高执行速度;还用于调用外部模块,其中,外部模块包括事件模块、报表模块、sql数据库模块和配方模块,所述事件模块用于事件的生成,报表模块用于生成报表,sql数据库模块用于第三方sql数据库操作,配方模块用于配方控制台操作。
本实施例中,所述运算指令模块,设于脚本解析器中,用于重新定义目标代码指令集,增加专门的运算符指令,其中,专门的运算符指令至少包括算术运算符指令(加/减/乘/除/整除/求余/求幂/负号)、比较运算符指令(等于/不等于/小于/大于/大于等于/小于等于/对象引用比较)、连接运算符指令(字符串连接)和逻辑运算符指令(逻辑非/逻辑与/逻辑或/逻辑异或/逻辑等价/逻辑隐含)。
本实施例中,所述内存管理模块,用于自定义内存申请或释放接口,根据需要切换模式,具体是使用宏定义切换内存申请方式,内存申请方式包括debug模式、std模式或自定义模式,其中,debug模式方便修改和调试代码,std模式可以直接调用标准库内存操作接口,自定义模块至少包括使用开放源代码的第三方内存管理库;内存管理模块还增加了内存管理回收机制,使得每个脚本独立对所有申请的内存使用链表进行管理,统一对申请的内存进行扫描,释放无引用内存,也就是在每次循环后清除脚本执行产生的内存,也起到提高脚本执行速度的作用;本实施例中,有的内存区域随着虚拟机进程的启动而存在,有些内存区域则是依赖用户线程的启动和结束而建立和销毁。
本实施例优选的,所述用于控制工程软件的脚本执行速度提升装置还包括异常处理模块,所述异常处理模块用于判断脚本的编译和执行是否报错,并使用c 抛错机制定位具体错误位置,错误判断分布在脚本解析器的各个角落,有错误时通过调用异常处理模块报告错误。编译错误至少包括非法变量、语法错误、不规范的代码,执行错误至少包括非法参数、内存申请错误、扩展函数执行错误;异常处理机制使用c 抛错机制,对执行错误、异常错误等进行精确到行的定位;执行时检查参数,对于非法参数、读写失败等操作会抛出错误;异常由throw语句抛出,并同时生成一个新的异常对象,接着被catch语句捕获,并在该catch语句块执行完毕后释放空间,如果异常在当前函数没有被捕,则结束当前函数的执行,并在主调函数中继续捕获该异常,直到异常被捕获或最终结束整个程序。由于所述异常处理模块能精准的定位错误位置,故也能提高脚本的编译和执行速度。
实施例2、
在实施例1所述的用于控制工程软件的脚本执行速度提升装置的基础上,本实施例所述的一种用于控制工程软件的脚本执行速度提升方法,包括:
步骤s1、重构脚本框架,创建脚本解析器:
具体地,重构脚本框架是使用虚拟机寄存器架构代替栈式架构。
步骤s2、编译脚本,使用hash表查找方法。
步骤s3、执行脚本,通过数组下标直接获取函数,并判断是否需要调用外部模块,其中,是否需要调用外部模块的前提条件是,如果脚本解析器中没有需要的函数或数据,则需要调用外部模块:
如需调用外部模块,则使用扩展函数专用接口根据用户需求调用事件模块、报表模块、sql数据库模块和配方模块中的一种或几种,调用完成后再跳转至下一步;
如不需调用,直接跳转至下一步。
步骤s3'、通过异常处理模块判断脚本的编译和执行是否报错:
若脚本报错,根据c 抛错机制进行精准定位,并修改脚本,然后跳转至步骤s2重新执行;
若脚本没有报错,直接跳转至步骤s4。
步骤s4、获取执行结果,并将结果返回至系统,此处所述“系统”可能是某个界面,也可能是其他后台程序。
步骤s5、根据用户需求销毁脚本解析器或返回步骤s2重新执行脚本解析器。实际上,所述销毁脚本解析器的是指销毁脚本容器,由专门的接口来销毁。
为了验证本发明所述的用于控制工程软件的脚本执行速度提升方法是否提升了执行速度,步骤s5之后还包括,对脚本解析器进行性能测试,具体测试方法为:使用while对脚本局部变量进行脚本性能测试。本实施例中使用while对脚本局部变量进行脚本性能测试可采用下述其一:
第一种测试方法,使用while对脚本局部变量进行1000000次累加操作。具体应用实例为:将本实施例所述的脚本执行速度提升方法应用到uwsrt软件中,使用while对脚本局部变量进行1000000次累加操作,本实施例所述的脚本执行速度提升方法的执行速度提升约200倍(现有技术用时约11.0s,本实施例用时约0.0503s)。
第二种测试方法,使用while对脚本局部变量进行累加与sin操作。具体应用实例为:将本实施例所述的脚本执行速度提升方法应用到uwsrt软件中,使用while对脚本局部变量进行累加与sin操作,执行速度提升约67倍(现有技术用时约15.8s,本实施例用时约0.236s)。
以上仅描述了本发明的基本原理和优选实施方式,本领域人员可以根据上述描述做出许多变化和改进,这些变化和改进应该属于本发明的保护范围。
1.一种用于控制工程软件的脚本执行速度提升方法,其特征在于,包括:
步骤s1、重构脚本框架,创建脚本解析器;
步骤s2、编译脚本,使用hash表查找方法;
步骤s3、执行脚本,通过数组下标直接获取函数,并判断是否需要调用外部模块:如需调用,则根据需求调用事件模块、报表模块、sql数据库模块和配方模块中的一种或几种,之后再跳转至下一步;如不需调用,直接跳转至下一步;
步骤s4、获取执行结果;
步骤s5、根据用户需求销毁脚本解析器或返回步骤s2重新执行脚本解析器。
2.根据权利要求1所述的方法,其特征在于,所述步骤s1具体包括:重构脚本框架,使用虚拟机寄存器架构代替栈式架构。
3.根据权利要求1或2所述的方法,其特征在于,步骤s3之后还包括步骤s3',判断脚本的编译和执行是否报错:
若脚本报错,根据c 抛错机制进行精准定位,并修改脚本,然后跳转至步骤s2重新执行;
若脚本没有报错,直接跳转至步骤s4。
4.根据权利要求3所述的方法,其特征在于,步骤s5之后还包括,对脚本解析器进行性能测试,具体测试方法为:使用while对脚本局部变量进行脚本性能测试。
5.一种用于控制工程软件的脚本执行速度提升装置,其特征在于,至少包括:
实现架构模块,用于重构脚本框架,创建脚本解析器;
扩展函数模块,用于编译脚本和执行脚本,其中,编译脚本时,使用hash表查找方法,执行脚本时,通过数组下标直接获取函数且获取当前运行环境相关参数;还用于调用外部模块,其中,外部模块包括事件模块、报表模块、sql数据库模块和配方模块;
运算指令模块,设于脚本解析器中,用于重新定义目标代码指令集,增加专门的运算符指令,其中,专门的运算符指令至少包括算术运算符指令、比较运算符指令、连接运算符指令和逻辑运算符指令;
内存管理模块,用于自定义内存申请或释放接口,根据需要切换模式;还增加了内存管理回收机制,用于在每次循环后清除脚本执行产生的内存。
6.根据权利要求5所述的装置,其特征在于,还包括异常处理模块,用于判断脚本的编译和执行是否报错,并使用c 抛错机制定位具体错误位置。
7.根据权利要求5或6所述的装置,其特征在于,所述实现架构模块,还增加了变量类型,至少包括数组、字典和函数引用;还规范化变量作用域,变量查找先后顺序按照局部变量-全局变量-系统记录点排列。
8.根据权利要求5所述的装置,其特征在于,所述扩展函数模块中,扩展函数接口提供所有函数信息的结构,函数参数统一只有一个指针,指向该脚本执行信息结构和当前运行环境相关参数;编译时使用hash表查找,执行时通过数组下标直接获取函数。
9.根据权利要求5所述的装置,其特征在于,所述内存管理模块中,自定义内存申请或释放接口时,使用宏定义切换内存申请方式,包括debug模式、std模式或自定义模式,其中,自定义模块至少包括使用开放源代码的第三方内存管理库。
10.根据权利要求5或9所述的装置,其特征在于,所述内存管理模块中,增加了内存管理回收机制,使得每个脚本独立对所有申请的内存使用链表进行管理,统一对申请的内存进行扫描,释放无引用内存。
技术总结