掌桥专利:专业的专利平台
掌桥专利
首页

基于人工智能的代码优化方法、装置、设备和存储介质

文献发布时间:2023-06-19 13:46:35


基于人工智能的代码优化方法、装置、设备和存储介质

技术领域

本申请涉及计算机技术领域,尤其涉及一种基于人工智能的代码优化方法、装置、设备和存储介质。

背景技术

现有的互联网系统,涉及了大量复杂的访问链路。这些访问链路在生产运行的过程中,会生成链路访问代码,需要调用较多的函数,而每个函数被调用并执行需要耗时。如果函数或方法选择不合适,则会导致链路的运行受阻或发生错误或耗时较长,进而导致链路运行不畅,给日常运营带来了负担。

发明内容

为了解决现有技术中由于函数选择不当导致链路运行不畅的技术问题。本申请提供了一种基于人工智能的代码优化方法、装置、设备和存储介质,其主要目的在于优化链路访问中的代码,减少链路访问代码的运算开销,提高链路访问效率。

为实现上述目的,本申请提供了一种链路访问代码的优化方法,该方法包括:

获取代码库中各个已知函数的函数标签,其中,已知函数为基本函数或自定义函数,函数标签包括功能标签、入参标签和返回值标签;

根据函数标签分别生成对应的已知函数的唯一标识;

根据预设规则确定函数标签相同的已知函数中的等价函数组合;

获取待优化链路访问代码及所属系统和所属业务分类;

确定待优化链路访问代码所包含的代码段以及代码段所包含的组成函数,其中,组成函数为代码库中的基本函数或自定义函数;

根据组成函数的唯一标识生成对应代码段的代码段标识;

将待优化链路访问代码所属系统、所属业务分类和代码段的代码段标识作为一条输入数据输入至已训练的耗时预估模型,得到每个代码段的预估耗时;

确定待优化代码段,将待优化代码段中的部分组成函数替换为对应的等价函数,以降低待优化代码段的预估耗时,其中,待优化代码段包括预估耗时超过耗时阈值的代码段。。

此外,为实现上述目的,本申请还提供了一种链路访问代码的优化装置,该装置包括:

函数标签获取模块,用于获取代码库中各个已知函数的函数标签,其中,已知函数为基本函数或自定义函数,函数标签包括功能标签、入参标签和返回值标签;

标识生成模块,用于根据函数标签分别生成对应的已知函数的唯一标识;

等价函数确定模块,用于根据预设规则确定函数标签相同的已知函数中的等价函数组合;

代码数据获取模块,用于获取待优化链路访问代码及所属系统和所属业务分类;

代码组成分析模块,用于确定待优化链路访问代码所包含的代码段以及代码段所包含的组成函数,其中,组成函数为代码库中的基本函数或自定义函数;

代码标识生成模块,用于根据组成函数的唯一标识生成对应代码段的代码段标识;

耗时预估模块,用于将待优化链路访问代码所属系统、所属业务分类和代码段的代码段标识作为一条输入数据输入至已训练的耗时预估模型,得到每个代码段的预估耗时;

代码优化模块,用于确定待优化代码段,将待优化代码段中的部分组成函数替换为对应的等价函数,以降低待优化代码段的预估耗时,其中,待优化代码段包括预估耗时超过耗时阈值的代码段。

为实现上述目的,本申请还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可读指令,处理器执行计算机可读指令时执行如前面任一项的链路访问代码的优化方法的步骤。

为实现上述目的,本申请还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行如前面任一项的链路访问代码的优化方法的步骤。

本申请提出的基于人工智能的代码优化方法、装置、设备和存储介质,通过自动划分等价函数,并通过神经网络模型来预测链路访问代码中每个函数的预测耗时,进而根据预测耗时确定是否替换等价函数,根据替换为等价函数来减少链路访问代码的运算开销,使链路访问更加顺畅,提高链路访问的效率。

附图说明

图1为本申请一实施例中链路访问代码的优化方法的流程示意图;

图2为本申请另一实施例中链路访问代码的优化方法的流程示意图;

图3为本申请另一实施例中链路访问代码的优化方法的流程示意图;

图4为本申请一实施例中链路访问代码的优化装置的结构框图;

图5为本申请一实施例中计算机设备的内部结构框图。

本申请目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

图1为本申请一实施例中链路访问代码的优化方法的流程示意图。参考图1,以该方法应用在终端设备为例进行说明。该链路访问代码的优化方法包括以下步骤S100-S800。

S100:获取代码库中各个已知函数的函数标签,其中,已知函数为基本函数或自定义函数,函数标签包括功能标签、入参标签和返回值标签。

具体地,代码库存储有开发语言中各种已知函数,代码库中的已知函数包括基本函数和自定义函数。已知函数包括程序逻辑函数和方法、数据库查询代码等不局限于此。功能标签用于表征该函数的基本功能或用途,入参标签用于表征该函数的入参参数的属性,例如入参参数的数据类型、入参参数的数量;返回值标签用于表征该函数的输出结果的属性,例如输出结果的数据类型、输出结果的数量等不局限于此。基本函数为编程软件中自带的公知函数或库函数。

自定义函数为工程人员在编程工作中根据需求编写的新的函数或算法,自定义函数可以由基本函数和自定义子函数组合得到,还可以全部由自定义子函数组合得到,还可以是一个独立的自定义子函数。

S200:根据函数标签分别生成对应的已知函数的唯一标识。

具体地,不同的已知函数的函数标签可能存在差异可能相同还可能存在部分相同,为了唯一区分各个已知函数,需要为各个已知函数打标唯一标识。为了体现函数标签之间的相似性,需要根据函数标签来生成唯一标识。唯一标识既能唯一标识不同的已知函数,而且还能体现不同已知函数的函数标签之间的相似性,还能对字符长度不一的函数标签进行格式统一化。另外,由于已知函数实际是由大量代码组成,由此,每个已知函数的数据量较大,因此将唯一标识作为已知函数的替代,可以减少后续的计算开销。

S300:根据预设规则确定函数标签相同的已知函数中的等价函数组合。

具体地,标签相同表示功能标签、入参标签和返回值标签都相同。标签相同的已知函数包括标签相同的两个基本函数、标签相同的两个自定义函数、标签相同的基本函数和自定义函数。等价函数表示功能相同且入参以及返回值均相同。例如,函数A和函数B,虽然代码有差异,但是入参的变量相同,函数的输出结果也相同。

S400:获取待优化链路访问代码及所属系统和所属业务分类。

具体地,例如某个产品系统被分割成了多个子系统A、B、C、D,某条业务流程为A调用B、B调用C、C调用D,这样形成了一条A->B->C->D的链路。例如,A发起一条用积分购买洗发水的请求(请求逻辑代码),B是订单系统查询洗发水数量和价格(查询数据库的SQL代码)并生成订单(订单生成代码),C是积分系统处理用户积分扣除(积分扣除代码),D为发货系统处理发货(发货处理代码)。

所属系统和所属业务分类是指调用待优化链路访问代码的系统和业务分类。

S500:确定待优化链路访问代码所包含的代码段以及代码段所包含的组成函数,其中,组成函数为代码库中的基本函数或自定义函数。

具体地,待优化链路访问代码为链路访问中每个阶段或业务流程所执行的代码段的集合。例如,在上述A->B->C->D的链路中,A对应阶段的代码段为请求逻辑代码,B对应阶段的代码段为查询数据库的SQL代码和订单生成代码,C对应阶段的代码段为积分扣除代码,D对应阶段的代码段为发货处理代码。

S600:根据组成函数的唯一标识生成对应代码段的代码段标识。

具体地,每个代码段由至少一个基本函数和/或自定义函数组成。在前面步骤中已经说明了基本函数和自定义函数的唯一标识的确定,因此,对其所包含的基本函数和自定义函数的唯一标识按照预设组合规则进行组合可以得到该代码段的代码段标识。预设组合规则可以为按照组成函数之间的调用关系和先后执行顺序来组合。使用代码段标识不仅可以用来区分不同的代码段,而且还可以表征代码段之间的相似性或关联性,还可以使用代码段标识作为代码段的替代,减少后续的计算开销。

另外,如果代码段中存在未知的新函数,则该新函数可以由人工设置函数标签,根据人工设置的函数标签自动生成新函数的唯一标识。

S700:将待优化链路访问代码所属系统、所属业务分类和代码段的代码段标识作为一条输入数据输入至已训练的耗时预估模型,得到每个代码段的预估耗时。

具体地,已训练的耗时预估模型用于预估每个代码段在待优化链路访问代码所在的运行环境下的耗时。在不同的运行环境下(例如不同的系统和业务分类),同一个函数的耗时可能不同,相应地,其代码段的耗时也会不同。

S800:确定待优化代码段,将待优化代码段中的部分组成函数替换为对应的等价函数,以降低待优化代码段的预估耗时,其中,待优化代码段包括预估耗时超过耗时阈值的代码段。

具体地,将预估耗时超过耗时阈值的代码段确定为待优化代码段。待优化代码段可能包括多个。每个待优化代码段由多个组成函数组成,如果其组成函数有对应的等价函数,则可以使用等价函数替换组成函数的方式来降低整个代码段的耗时。

如果一个组成函数有多个等价函数可替换,则可以分别用不同等价函数的唯一标识来替换该组成函数的唯一标识,以更新替换待优化代码段的代码段标识。再通过已训练的耗时预估模型对替换后的待优化链路访问代码或替换后的待优化代码段重新进行耗时预估。选择预估耗时最短的等价函数作为最终的替换函数。

同理,如果待优化代码段有多个组成函数有对应的等价函数可替换,则通过组合有多种替换方式,每种替换方式替换至少一个组成函数。根据不同的替换方式对待优化代码段中可替换的组成函数的唯一标识进行替换,选出预估耗时最低的替换方式。

在另一个具体实施例中,还可以随机对待优化代码段中可替换的组成函数的唯一标识利用其等价函数的唯一标识进行替换,且每次只替换一个组成函数,利用已训练的耗时预估模型对每次替换后的代码段或待优化代码段进行耗时预估。将多次替换中、使代码段或待优化代码段的预估耗时降低的等价函数作为最终的替换函数。

在另一个具体实施例中,待优化代码段包括存在等价函数的代码段。预估耗时超过耗时阈值的代码段可能不存在等价函数,因此即使其为待优化代码段,由于其没有等价函数可替换,实际上是不可优化的。本具体实施例对于只要存在等价函数的代码段都可以尝试去优化,不局限只优化预估耗时大的代码段,对于预估耗时小的代码段在其存在等价函数的情况下,可以进一步优化,从而对整个待优化链路访问代码的耗时进行优化。

已训练的耗时预估模型用于对待优化链路访问代码中的代码段的耗时进行预估,使得能够在暂时不改变链路访问代码的情况下,先对各种版本的链路访问代码的耗时进行预估,找出预估耗时最低的链路访问代码后,再对实际的链路访问代码进行更改优化。

本实施例通过自动划分等价函数,并通过神经网络模型来预测链路访问代码中每个代码段的预测耗时,进而根据预测耗时确定是否替换等价函数,根据替换为等价函数来减少链路访问代码的运算开销,优化函数的运行耗时,使链路访问更加顺畅,提高链路访问的效率,实现了从代码运行耗时的角度优化代码的目的。

在一个实施例中,步骤S300具体包括以下步骤:

在每次函数等价验证中对两个函数标签相同的已知函数传入相同的参数值,以对两个函数标签相同的已知函数进行多次函数等价验证,得到对应的多组返回值,其中,每次函数等价验证传入的参数值不同,每组返回值包括两个函数标签相同的已知函数对应的两个返回值;

分别判断每组返回值中两个返回值是否相同;

若所有组中的两个返回值均相同,则将两个函数标签相同的已知函数确定为等价函数;

若任意一组中的两个返回值不同,则判定两个函数标签相同的已知函数不属于等价函数。

具体地,只通过函数标签相同来确定两个函数为等价函数可能有些草率,通过多组相同的输入参数值来验证两个函数的输出结果是否始终保持一致可以更加确定两个函数是否具等价,降低使用等价函数替换后的链路访问代码的出错概率。

函数标签不同的两个已知函数一定不是等价函数,因此,本实施例只对函数标签相同的两个已知函数进行等价验证。对函数标签相同的两个已知函数的等价验证次数可以根据实际情况设置。例如,可以设置50次、100次等不限于此。且,为了尽量排除偶然性,每次等价验证中传入的参数值不同。而在同一次等价验证中传入两个已知函数的参数值相同。如果在预设次数的函数等价验证中两个已知函数的返回值都相同,则说明两个已知函数是等价的。如果在验证次数未达到预设次数前,函数等价验证时某次出现两个已知函数的返回值不同,则说明两个已知函数不为等价函数,且不再对这两个已知函数继续进行等价验证。

通过本实施例可以从多个角度判断两个已知函数是否等价,增加判断的可信度,降低利用等价函数替换链路访问代码中的组成函数后链路访问代码的出错率,保证了链路访问的正常运行。

图2为本申请另一实施例中链路访问代码的优化方法的流程示意图;步骤S800具体包括以下步骤:

S810:获取待优化代码段所包含的组成函数的等价函数作为第一目标等价函数,获取第一目标等价函数的唯一标识;

S820:对第一目标等价函数进行随机组合,得到至少一种不同的替换组合,其中,每种替换组合包括至少一个第一目标等价函数;

S830:根据替换组合中的第一目标等价函数的唯一标识,对待优化代码段的代码段标识进行替换更新,得到更新的代码段标识;

S840:将待优化链路访问代码的所属系统、所属业务分类和更新的代码段标识作为一条输入数据输入至已训练的耗时预估模型,得到根据对应替换组合替换后的待优化链路访问代码中每个代码段的预估耗时;

S850:选择最低预估耗时所对应的替换组合作为目标替换组合;

S860:将待优化链路访问代码中的待替换函数替换为目标替换组合中对应的第一目标等价函数,其中,待替换函数为组成函数。

具体地,每个代码段包括至少一个组成函数,该组成函数可以是基本函数也可以是自定义函数。根据步骤S100-S300已经确定了等价函数组合,因此,通过匹配可以确定待优化代码段所包含的组成函数对应的等价函数,存在等价函数的组成函数为待替换函数。待替换函数的等价函数包括至少一个,待优化代码段包含的待替换函数包括至少一个,因此,一个待优化代码段有多种替换方式,一个待优化链路访问代码包括至少一个待优化代码段,因此,一个待优化链路访问代码有多种替换方式。每种替换方式对应一种替换组合,替换组合包括至少一个第一目标等价函数。

使用不同的替换组合,待优化代码段被替换后的代码不同,因此,其预估耗时也会不同。为了节省运算开销,本实施例是使用第一目标等价函数的唯一标识对待优化代码段的代码段标识进行相应的替换,以更新替换代码段标识。

利用已训练的耗时预估模型对每种替换组合对应的替换后的代码段重新进行耗时预估。多种替换组合中预估耗时最低的替换组合为最优的目标替换组合。根据目标替换组合中的第一目标等价函数对待优化链路代码中对应的组成函数进行替换,即可得到优化后的链路访问代码。

本实施例在对待优化链路代码进行优化前,对每个可能的替换组合对应的链路代码进行耗时预测,找出最优的目标替换组合,再利用目标替换组合中的第一目标等价函数对实际的链路访问代码中的组成函数进行替换,实现了代码的优化和耗时优化。

图3为本申请另一实施例中链路访问代码的优化方法的流程示意图;步骤S800具体包括以下步骤:

S801:获取待优化代码段所包含的组成函数的等价函数作为第一候选等价函数,获取第一候选等价函数的唯一标识;

S802:分别根据任意一个第一候选等价函数的唯一标识,对待优化代码段的代码段标识进行一次替换更新,得到更新的代码段标识;

S803:分别将每次替换更新后待优化链路访问代码的所属系统、所属业务分类和更新的代码段标识作为一条输入数据输入至已训练的耗时预估模型,得到根据对应替换更新后的待优化链路访问代码中每个代码段的预估耗时;

S804:将多次替换更新中使代码段的预估耗时降低的第一候选等价函数作为第二候选等价函数;

S805:若至少两个第二候选等价函数对应同一个组成函数,则对对应同一个组成函数的所有第二候选等价函数的预估耗时进行比较,选取预估耗时最低的第二候选等价函数作为对应组成函数的第二目标等价函数,

若组成函数对应一个第二候选等价函数,则将第二候选等价函数作为对应组成函数的第二目标等价函数;

S806:利用第二目标等价函数对待优化链路访问代码中对应的组成函数进行替换。

具体地,随机对待优化代码段中可替换的组成函数利用其等价函数进行替换,且每次只替换一个组成函数,利用已训练的耗时预估模型对每次替换后的待优化代码段或代码段进行耗时预估。将多次替换中、使待优化代码段的预估耗时降低或所有代码段的总预估耗时降低的等价函数作为第二候选等价函数。如果组成函数对应至少两个第二候选等价函数,则对同一个组成函数所对应的所有第二候选等价函数的预估耗时进行比较,选取预估耗时最低的第二候选等价函数作为该组成函数的第二目标等价函数。如果组成函数对应一个第二候选等价函数,则将该第二候选等价函数作为该组成函数的第二目标等价函数。利用第二目标等价函数对待优化链路访问代码中对应的组成函数进行替换。对预估耗时比较可以为对所有代码段的总预估耗时的比较,也可以是对待优化代码段的预估耗时的比较。

例如,利用等价函数e对可替换的组成函数f进行替换,然后利用已训练的耗时预估模型对替换后的待优化代码段进行耗时预估,如果替换后的待优化代码段的预估耗时降低,则将等价函数e作为组成函数f的候选等价函数。如果替换后的待优化代码段的预估耗不降反增,则禁止等价函数e替换函数f。

利用等价函数c对可替换的组成函数f进行替换,然后利用已训练的耗时预估模型对替换后的待优化代码段进行耗时预估,如果替换后的待优化代码段的预估耗时降低,则将等价函数c作为组成函数f的候选等价函数。如果替换后的待优化代码段的预估耗不降反增,则禁止等价函数c替换函数f。

利用等价函数d对可替换的组成函数g进行替换,然后利用已训练的耗时预估模型对替换后的待优化代码段进行耗时预估,如果替换后的待优化代码段的预估耗时降低,则将等价函数d作为组成函数g的候选等价函数。如果替换后的待优化代码段的预估耗不降反增,则禁止等价函数d替换函数g。

如果等价函数e和等价函数c为组成函数f的候选等价函数,且等价函数e的预估耗时小于等价函数c的预估耗时,等价函数d为组成函数g的候选等价函数,则最终的第二目标等价函数为等价函数e和等价函数d。利用等价函数e和等价函数d分别对待优化链路访问代码中的组成函数f和组成函数g进行替换。

如果等价函数e和等价函数c为组成函数f的候选等价函数,且等价函数e的预估耗时小于等价函数c的预估耗时,禁止等价函数d替换函数g,则最终的第二目标等价函数为等价函数e。利用等价函数e对待优化链路访问代码中的组成函数f进行替换。

在一个实施例中,在步骤S700之前,该方法还包括:

获取多个链路访问样本数据,每个链路访问样本数据包括样本链路访问代码及所属样本系统、所属样本业务分类、链路访问各个阶段的实际耗时;

确定链路访问样本代码中所包含的样本代码段以及样本代码段所包含的样本函数;

根据样本函数的唯一标识生成对应的样本代码段的代码段标识;

根据样本代码段在链路访问中所处阶段确定样本代码段的实际耗时;

将每一条链路访问样本数据对应的样本代码段的代码段标识、所属样本系统、所属样本业务分类作为一条训练样本,将样本代码段对应的实际耗时作为训练样本的样本标签,得到训练样本集合,训练样本集合包括多条携带样本标签的训练样本;

根据训练样本集合对待训练耗时预估模型进行迭代训练,得到已训练的耗时预估模型。

具体地,链路访问样本数据是历史访问路径对应的数据。链路监控系统通过埋点的方法可以获取每个历史链路访问路径中每个节点的耗时情况,一个节点对应一个代码段的执行,因此,通过节点的耗时,可以得到样本代码段的实际耗时。通过对待训练耗时预估模型进行迭代训练,可以使训练后的耗时预估模型能够学习到系统、业务分类以及访问链路中各个链路节点之间运行耗时的规律和潜在关联,进而实现对未知耗时的待优化链路访问代码的耗时预测。

一条访问链路会包含很多处理方法,即需要运行的代码通常会较长,在模型训练的时候没必要把代码也输入到模型中,使用样本函数的唯一标识来替代代码段,有利于训练模型的快速训练,减少运算开销。

本申请实施例可以基于人工智能技术对相关的数据进行获取和处理。其中,人工智能(ArtificialIntelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。

人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、机器人技术、生物识别技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。

在一个实施例中,在上述实施例中确定链路访问样本代码中所包含的样本代码段之前,该方法还包括:剔除发生系统故障时产生的链路访问样本数据。

具体地,链路监控系统还可以实现资源监控,通过系统日志来判断每个历史链路访问时是否出现系统故障,将发生系统故障时产生的链路访问样本数据剔除,排除了系统故障对链路访问中各个阶段的耗时的影响。使得训练数据更加准确,得到的耗时预估模型的耗时预测能力更准确。

在一个实施例中,步骤S100具体包括以下步骤:

从已知函数对应的功能注释中提取出关键词作为对应已知函数的功能标签;

提取和统计已知函数的入参参数的数据类型和数量作为对应已知函数的入参标签;

提取和统计已知函数的输出参数的数据类型和数量作为对应已知函数的返回值标签。

具体地,从基本函数或自定义函数对应的功能注释中提取出关键词作为对应函数的功能标签;提取和统计基本函数或自定义函数的入参参数的数据类型和数量作为对应函数的入参标签;提取和统计基本函数或自定义函数的输出参数的数据类型和数量作为对应函数的返回值标签。

功能注释为开发语言中函数的语言形式的功能备注,用于解释函数的功能,对功能注释进行分词,去掉无意义的分词,将留下来的分词作为关键词组成基本函数的功能标签。

入参参数为函数的输入变量,一个函数包括至少一个入参参数,入参参数的数据类型也会在函数代码中定义。可以从已知函数的代码中提取出入参参数和数据类型,并统计出入参参数的数量。

返回值参数为函数的输出结果参数。可以从已知函数的代码中提取出输出结果参数和数据类型,并统计出输出结果参数的数量。

当然还可以从开发语言中每个已知函数的帮助文档中提取出入参标签和返回值标签。

在一个实施例中,步骤S200具体包括以下步骤:对不同函数标签的已知函数进行不重复编号,对相同函数标签的不同已知函数的所述编号增加区别字段,将最终得到的编号作为对应的已知函数的唯一标识。

具体地,对不同函数标签的基本函数和自定义函数进行不重复编号,对相同函数标签的不同函数的编号增加区别字段,将最终得到的编号作为对应的基本函数或自定义函数的唯一标识。唯一标识具体可以为不重复的数字序列。函数标签太长,也不整齐,不利于比较,转为数字序列方便比较和区分。

生成唯一标识的目的是为神经网络模型训练提供简洁的数据,为了实现等价功能代码的替换,减少计算开销。

本申请使用基于深度学习模型对各种替换方式对应的链路访问代码的耗时进行预估,筛选出最优替换方式,根据最优替换方式中的目标等价函数对实际的链路访问代码中对应的组成函数进行替换,实现了自动化的代码优化;节约了人力,提高了工作效率;被优化的链路访问代码也节约了硬件资源,降低运营成本。优化案例可以被记录、跟踪和共享,给后续代码开发提供了思路和方向。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

图4为本申请一实施例中链路访问代码的优化装置的结构框图;该链路访问代码的优化装置包括:

函数标签获取模块100,用于获取代码库中各个已知函数的函数标签,其中,已知函数为基本函数或自定义函数,函数标签包括功能标签、入参标签和返回值标签;

标识生成模块200,用于根据函数标签分别生成对应的已知函数的唯一标识;

等价函数确定模块300,用于根据预设规则确定函数标签相同的已知函数中的等价函数组合;

代码数据获取模块400,用于获取待优化链路访问代码及所属系统和所属业务分类;

代码组成分析模块500,用于确定待优化链路访问代码所包含的代码段以及代码段所包含的组成函数,其中,组成函数为代码库中的基本函数或自定义函数;

代码标识生成模块600,用于根据组成函数的唯一标识生成对应代码段的代码段标识;

耗时预估模块700,用于将待优化链路访问代码所属系统、所属业务分类和代码段的代码段标识作为一条输入数据输入至已训练的耗时预估模型,得到每个代码段的预估耗时;

代码优化模块800,用于确定待优化代码段,将待优化代码段中的部分组成函数替换为对应的等价函数,以降低待优化代码段的预估耗时,其中,待优化代码段包括预估耗时超过耗时阈值的代码段。

在一个实施例中,等价函数确定模块300具体包括:

执行验证单元,用于在每次函数等价验证中对两个函数标签相同的已知函数传入相同的参数值,以对两个函数标签相同的已知函数进行多次函数等价验证,得到对应的多组返回值,其中,每次函数等价验证传入的参数值不同,每组返回值包括两个函数标签相同的已知函数对应的两个返回值;

第一比较单元,用于分别判断每组返回值中两个返回值是否相同;

判定单元,用于若所有组中的两个返回值均相同,则将两个函数标签相同的已知函数确定为等价函数,若任意一组中的两个返回值不同,则判定两个函数标签相同的已知函数不属于等价函数。

在一个实施例中,代码优化模块800具体包括:

第一匹配单元,用于获取待优化代码段所包含的组成函数的等价函数作为第一目标等价函数,获取第一目标等价函数的唯一标识;

组合单元,用于对第一目标等价函数进行随机组合,得到至少一种不同的替换组合,其中,每种替换组合包括至少一个第一目标等价函数;

第一替换单元,用于根据替换组合中的第一目标等价函数的唯一标识,对待优化代码段的代码段标识进行替换更新,得到更新的代码段标识;

第一预估单元,用于将待优化链路访问代码的所属系统、所属业务分类和更新的代码段标识作为一条输入数据输入至已训练的耗时预估模型,得到根据对应替换组合替换后的待优化链路访问代码中每个代码段的预估耗时;

第二比较单元,用于选择最低预估耗时所对应的替换组合作为目标替换组合;

第一优化单元,用于将待优化链路访问代码中的待替换函数替换为目标替换组合中对应的第一目标等价函数,其中,待替换函数为组成函数。

在一个实施例中,代码优化模块800具体包括:

第二匹配单元,用于获取待优化代码段所包含的组成函数的等价函数作为第一候选等价函数,获取第一候选等价函数的唯一标识;

第二替换单元,用于分别根据任意一个第一候选等价函数的唯一标识,对待优化代码段的代码段标识进行一次替换更新,得到更新的代码段标识;

第二预估单元,用于分别将每次替换更新后待优化链路访问代码的所属系统、所属业务分类和更新的代码段标识作为一条输入数据输入至已训练的耗时预估模型,得到根据对应替换更新后的待优化链路访问代码中每个代码段的预估耗时;

第三比较单元,用于将多次替换更新中使代码段的预估耗时降低的第一候选等价函数作为第二候选等价函数;

第四比较单元,用于若至少两个第二候选等价函数对应同一个组成函数,则对对应同一个组成函数的所有第二候选等价函数的预估耗时进行比较,选取预估耗时最低的第二候选等价函数作为对应组成函数的第二目标等价函数,若组成函数对应一个第二候选等价函数,则将第二候选等价函数作为对应组成函数的第二目标等价函数;

第二优化单元,用于利用第二目标等价函数对待优化链路访问代码中对应的组成函数进行替换。

在一个实施例中,该装置还包括:

样本数据获取单元,用于获取多个链路访问样本数据,每个链路访问样本数据包括样本链路访问代码及所属样本系统、所属样本业务分类、链路访问各个阶段的实际耗时;

组成分析单元,用于确定链路访问样本代码中所包含的样本代码段以及样本代码段所包含的样本函数;

样本代码标识生成单元,用于根据样本函数的唯一标识生成对应的样本代码段的代码段标识;

耗时确定单元,用于根据样本代码段在链路访问中所处阶段确定样本代码段的实际耗时;

样本组成单元,用于将每一条链路访问样本数据对应的样本代码段的代码段标识、所属样本系统、所属样本业务分类作为一条训练样本,将样本代码段对应的实际耗时作为训练样本的样本标签,得到训练样本集合,训练样本集合包括多条携带样本标签的训练样本;

模型训练单元,用于根据训练样本集合对待训练耗时预估模型进行迭代训练,得到已训练的耗时预估模型。

在一个实施例中,该装置还包括:数据筛选模块,用于剔除发生系统故障时产生的链路访问样本数据。

在一个实施例中,函数标签获取模块100具体包括:

功能标签获取单元,用于从已知函数对应的功能注释中提取出关键词作为对应已知函数的功能标签;

入参标签获取单元,用于提取和统计已知函数的入参参数的数据类型和数量作为对应已知函数的入参标签;

返回值标签获取单元,用于功能标签获取单元,用于提取和统计已知函数的输出参数的数据类型和数量作为对应已知函数的返回值标签。

在一个实施例中,标识生成模块200具体用于对不同函数标签的已知函数进行不重复编号,对相同函数标签的不同已知函数的编号增加区别字段,将最终得到的编号作为对应的已知函数的唯一标识。

其中上述模块/单元中的“第一”和“第二”的意义仅在于将不同的模块/单元加以区分,并不用于限定哪个模块/单元的优先级更高或者其它的限定意义。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块,本申请中所出现的模块的划分,仅仅是一种逻辑上的划分,实际应用中实现时可以有另外的划分方式。

关于链路访问代码的优化装置的具体限定可以参见上文中对于链路访问代码的优化方法的限定,在此不再赘述。上述链路访问代码的优化装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

图5为本申请一实施例中计算机设备的内部结构框图。如图5所示,该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,该计算机设备的处理器用于提供计算和控制能力。存储器包括存储介质和内存储器。存储介质可以是非易失性存储介质,也可以是易失性存储介质。存储介质存储有操作系统,还可存储有计算机可读指令,该计算机可读指令被处理器执行时,可使得处理器实现链路访问代码的优化方法。该内存储器为存储介质中的操作系统和计算机可读指令的运行提供环境。该内存储器中也可储存有计算机可读指令,该计算机可读指令被处理器执行时,可使得处理器执行链路访问代码的优化方法。该计算机设备的网络接口用于与外部服务器通过网络连接通信。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可读指令(例如计算机程序),处理器执行计算机可读指令时实现上述实施例中链路访问代码的优化方法的步骤,例如图1所示的步骤S100至步骤S800及该方法的其它扩展和相关步骤的延伸。或者,处理器执行计算机可读指令时实现上述实施例中链路访问代码的优化装置的各模块/单元的功能,例如图4所示模块100至模块800的功能。为避免重复,这里不再赘述。

处理器可以是中央处理单元(CentralProcessingUnit,CPU),还可以是其他通用处理器、数字信号处理器(DigitalSignalProcessor,DSP)、专用集成电路(ApplicationSpecificIntegratedCircuit,ASIC)、现成可编程门阵列(Field-ProgrammableGateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,处理器是计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。

存储器可用于存储计算机可读指令和/或模块,处理器通过运行或执行存储在存储器内的计算机可读指令和/或模块,以及调用存储在存储器内的数据,实现计算机装置的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、视频数据等)等。

存储器可以集成在处理器中,也可以与处理器分开设置。

本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机可读指令,计算机可读指令被处理器执行时实现上述实施例中链路访问代码的优化方法的步骤,例如图1所示的步骤S100至步骤S800及该方法的其它扩展和相关步骤的延伸。或者,计算机可读指令被处理器执行时实现上述实施例中链路访问代码的优化装置的各模块/单元的功能,例如图4所示模块100至模块800的功能。为避免重复,这里不再赘述。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机可读指令来指示相关的硬件来完成,所述的计算机可读指令可存储于一计算机可读取存储介质中,该计算机可读指令在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双倍速率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。

以上仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。

技术分类

06120113808188