一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种内存分配方法、系统、计算机设备及可读介质与流程

2022-08-21 13:32:00 来源:中国专利 TAG:


1.本发明涉及存储技术领域,特别是涉及一种内存分配方法、系统、计算机设备及可读介质。


背景技术:

2.目前,边缘计算产品线具有多种型号的nvr(network video recorder,网络视频录像机,简称nvr)产品,其中低端的nvr产品设备运行内存小,而随着功能的不断增加,对应产品的内存越发吃紧,导致在业务并发的大压力下容易出现内存不足的问题,甚至会引起重要的业务功能失效。


技术实现要素:

3.鉴于以上所述现有技术的缺点,本发明的目的在于提供一种内存分配方法、系统、计算机设备及可读介质,用于解决现有图像拍摄产品在增加功能后内存不够用的问题。
4.为实现上述目的及其他相关目的,本发明提供一种内存分配方法,所述方法包括以下步骤:
5.获取多个内存申请请求、所述多个内存申请请求对应的内存需求总量以及当前时刻业务内存剩余量;
6.计算所述内存需求总量与当前时刻业务内存剩余量的内存差值,记为第一内存差值;
7.将所述第一内存差值与预设内存值进行比较;
8.当所述第一内存差值小于等于所述预设内存值时,对每个内存申请请求进行内存分配;或者,当所述第一内存差值大于所述预设内存值时,对所述多个内存申请请求中的部分内存申请请求进行内存自适应分配。
9.可选地,对所述多个内存申请请求中的部分内存申请请求进行内存自适应分配的过程包括:
10.获取每个内存申请请求所对应的业务类型,并根据所述业务类型对每个内存申请请求进行特性标记;
11.根据每个内存申请请求的特性标记结果,对所述多个内存申请请求中的部分内存申请请求进行内存自适应分配。
12.可选地,根据所述业务类型对每个内存申请请求进行特性标记的过程包括:
13.对每个内存申请请求所对应的业务类型进行重要性判断,并基于重要性判断结果对每个内存申请请求进行重要性级别标记;
14.对每个内存申请请求所对应的业务类型进行时效性判断,并基于时效性判断结果对每个内存申请请求进行时效性级别标记;
15.将每个内存申请请求的重要性级别标记和时效性级别标记进行结合,作为每个内存申请请求的特性标记结果。
16.可选地,根据每个内存申请请求的特性标记结果,对所述多个内存申请请求中的部分内存申请请求进行内存自适应分配的过程包括:
17.按照每个内存申请请求的特性标记结果,对所述多个内存申请请求进行优先级判断;其中,重要性级别标记的优先级大于时效性级别标记;
18.获取优先级别最高的内存申请请求作为待分配内存申请请求,并将其余优先级别的内存申请请求写入等待队列中;
19.从当前时刻业务内存剩余量中匹配出与所述待分配内存申请请求对应的内存容量,作为待分配内存容量;
20.将所述待分配内存容量分配至所述待分配内存申请请求所对应的业务线程,并按照优先级别继续为等待队列中的内存申请请求进行内存自适应分配,直至从当前时刻业务内存剩余量中匹配出的内存容量大于第二内存差值时,结束内存分配;其中,所述第二内存差值为当前时刻业务内存剩余量与所述预设内存值的内存差值。
21.可选地,将所述待分配内存容量分配至所述待分配内存申请请求所对应的业务线程后,所述方法还包括:
22.获取所述等待队列中每个内存申请请求的剩余等待时间和功能响应时间;其中,每个内存申请请求的剩余等待时间=预设超时时间-每个内存申请请求的等待时间,所述功能响应时间用于区分内存申请请求的时效性级别;
23.将所述等待队列中每个内存申请请求的剩余等待时间与功能响应时间进行比对,并获取剩余等待时间小于功能响应时间的内存申请请求,记为待调整内存申请请求;
24.对所述待调整内存申请请求进行升级,提高所述待调整内存申请请求的时效性级别。
25.可选地,在获取当前时刻业务内存剩余量前,所述方法还包括:
26.判断占用内存容量的业务是否执行完毕;
27.如果执行完毕,则调用对应业务的接口,释放对应业务所占用的内存容量,并把释放出的内存容量作为当前时刻业务内存剩余量中的部分内存容量;
28.如果未执行完毕,则直接获取当前时刻业务内存剩余量。
29.可选地,在获取多个内存申请请求前,所述方法还包括:获取目标产品的所有业务,并为每个业务分配至少一个业务流程;以便所述目标产品在执行某个业务时,通过所述业务流程发起内存申请请求;其中,所述目标产品的业务包括以下至少之一:智能图片业务、用户抓图业务、智能分析业务。
30.本发明还提供一种内存分配系统,所述系统包括有:
31.采集模块,用于获取多个内存申请请求、所述多个内存申请请求对应的内存需求总量以及当前时刻业务内存剩余量;
32.计算模块,用于计算所述内存需求总量与当前时刻业务内存剩余量的内存差值,记为第一内存差值;
33.比较模块,用于将所述第一内存差值与预设内存值进行比较;
34.内存分配模块,用于在所述第一内存差值小于等于所述预设内存值时,对每个内存申请请求进行内存分配;或者,在所述第一内存差值大于所述预设内存值时,对所述多个内存申请请求中的部分内存申请请求进行内存自适应分配。
35.本发明还提供一种计算机设备,包括:
36.处理器;和
37.存储有指令的计算机可读介质,当所述处理器执行所述指令时,使得所述设备执行如上述中任一所述的方法。
38.本发明还提供一种计算机可读介质,其上存储有指令,所述指令由处理器加载并执行如上述中任一所述的方法。
39.如上所述,本发明提供一种内存分配方法、系统、计算机设备及可读介质,具有以下有益效果:
40.本发明先获取多个内存申请请求、多个内存申请请求对应的内存需求总量以及当前时刻业务内存剩余量,然后计算内存需求总量与当前时刻业务内存剩余量的内存差值,记为第一内存差值;再将第一内存差值与预设内存值进行比较,并在第一内存差值小于等于预设内存值时,对每个内存申请请求进行内存分配;或者,在第一内存差值大于预设内存值时,对多个内存申请请求中的部分内存申请请求进行内存自适应分配。相当于本发明设计了一种自适应的内存分配方案,当业务内存剩余量充足时,直接为每个内存申请请求都分配对应的内存容量;当业务内存剩余量不足时,可以选择其中部分内存申请请求进行内存分配(例如对优先级别高的内存申请请求进行内存分配),从而能最大限度地保证目标产品在低内存状态下正常运作,以便解决现有图像拍摄产品在增加功能后内存不够用的问题。
附图说明
41.图1为一实施例提供的内存分配方法的流程示意图;
42.图2为一实施例提供的标记重要性级别的流程示意图;
43.图3为一实施例提供的标记时效性级别的流程示意图;
44.图4为一实施例提供的调整时效级别的流程示意图;
45.图5为一实施例提供的利用释放内存进行内存分配的流程示意图;
46.图6为一实施例提供的释放内存的流程示意图;
47.图7为一实施例提供的发起内存申请请求的示意图;
48.图8为另一实施例提供的内存分配方法的流程示意图;
49.图9为又一实施例提供的内存分配方法的流程示意图;
50.图10为一实施例提供的进行内存分配时的框架示意图;
51.图11为一实施例提供的内存申请的实现示意图;
52.图12为一实施例提供的内存分配系统的硬件结构示意图;
53.图13为一实施例提供的计算机设备的硬件结构示意图。
具体实施方式
54.以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施
例中的特征可以相互组合。
55.需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
56.请参阅图1所示,本发明提供一种内存分配方法,该方法包括以下步骤:
57.s100,获取多个内存申请请求、所述多个内存申请请求对应的内存需求总量以及当前时刻业务内存剩余量;其中,内存申请请求由业务发起。
58.s200,计算所述内存需求总量与当前时刻业务内存剩余量的内存差值,记为第一内存差值;
59.s300,将所述第一内存差值与预设内存值进行比较。其中,本实施例中的预设内存值可以是最低业务内存剩余量,还可以是根据实际情况设定的内存值。同时,本实施例中的预设内存值可以用水线或内存配置水线表示,即一些实施例或附图中描述的水线或内存配置水线,均可以表示为本实施例中的预设内存值。
60.s400,当所述第一内存差值小于等于所述预设内存值时,对每个内存申请请求进行内存分配;或者,当所述第一内存差值大于所述预设内存值时,对所述多个内存申请请求中的部分内存申请请求进行内存自适应分配。
61.由此可知,本实施例设计了一种自适应的内存分配方案,当业务内存剩余量充足时,直接为每个内存申请请求都分配对应的内存容量;当业务内存剩余量不足时,可以选择其中部分内存申请请求进行内存分配,例如对优先级别高的内存申请请求进行内存分配,从而能最大限度地保证目标产品在低内存状态下正常运作,以便解决现有图像拍摄产品在增加功能后内存不够用的问题。
62.根据上述记载,在一示例性实施例中,对所述多个内存申请请求中的部分内存申请请求进行内存自适应分配的过程包括:获取每个内存申请请求所对应的业务类型,并根据所述业务类型对每个内存申请请求进行特性标记;根据每个内存申请请求的特性标记结果,对所述多个内存申请请求中的部分内存申请请求进行内存自适应分配。具体地,根据所述业务类型对每个内存申请请求进行特性标记的过程包括:对每个内存申请请求所对应的业务类型进行重要性判断,并基于重要性判断结果对每个内存申请请求进行重要性级别标记;以及对每个内存申请请求所对应的业务类型进行时效性判断,并基于时效性判断结果对每个内存申请请求进行时效性级别标记;将每个内存申请请求的重要性级别标记和时效性级别标记进行结合,作为每个内存申请请求的特性标记结果。
63.作为一示例,本实施例可以将重要性级别分为三个级别,即重要i级、重要ii级和重要iii级,其中,重要i级的优先级别大于重要ii级,重要ii级的优先级别大于重要iii级。如图2所示,本实施例对每个内存申请请求进行重要性级别标记的过程可以是:对每个内存申请请求所对应的业务类型进行任务重要程度判断,确定业务类型的等级是紧急、重要还是其他;如果业务类型的重要程度等级是紧急,则对应内存申请请求的重要性级别标记为重要i级。如果业务类型的重要程度等级是重要,则对应内存申请请求的重要性级别标记为重要ii级。如果业务类型的重要程度等级是其他,则对应内存申请请求的重要性级别标记为重要iii级。其中,本实施例中重要程度等级的紧急、重要和其他可以根据实际情况进行
设定,本实施例不做具体限制。
64.作为另一示例,本实施例可以将时效性级别分为三个级别,即时效i级、时效ii级和时效iii级,其中,时效i级的优先级别大于时效ii级,时效ii级的优先级别大于时效iii级。此外,本实施例中的重要性级别的优先级大于时效性级别,即重要iii级的优先级大于时效i级。如图3所示,本实施例对每个内存申请请求进行时效性级别标记的过程可以是:对每个内存申请请求所对应的业务类型进行任务时效程度判断,确定业务类型的功能响应时间与第一预设响应时间值、第二预设响应时间值的关系;其中,第一预设响应时间值小于第二预设响应时间值。如果内存申请请求a所对应的业务类型的功能响应时间小于第一预设响应时间值,则对内存申请请求a的时效性级别标记为时效i级。如果内存申请请求a所对应的业务类型的功能响应时间大于等于第一预设响应时间值,且小于第二预设响应时间值,则对内存申请请求a的时效性级别标记为时效ii级。如果内存申请请求a所对应的业务类型的功能响应时间小于第二预设响应时间值,则对内存申请请求a的时效性级别标记为时效iii级。其中,第一预设响应时间值和第二预设响应时间值可以根据实际情况进行设定,本实施例不对数值做具体限定;例如,可以将第一预设响应时间值设定为40毫秒(ms),可以将第二预设响应时间值设定为200毫秒(ms)。
65.根据上述记载,在一示例性实施例中,根据每个内存申请请求的特性标记结果,对所述多个内存申请请求中的部分内存申请请求进行内存自适应分配的过程包括:按照每个内存申请请求的特性标记结果,对所述多个内存申请请求进行优先级判断;其中,重要性级别标记的优先级大于时效性级别标记。获取优先级别最高的内存申请请求作为待分配内存申请请求,并将其余优先级别的内存申请请求写入等待队列中。从当前时刻业务内存剩余量中匹配出与所述待分配内存申请请求对应的内存容量,作为待分配内存容量;将所述待分配内存容量分配至所述待分配内存申请请求所对应的业务线程,并按照优先级别继续为等待队列中的内存申请请求进行内存自适应分配,直至从当前时刻业务内存剩余量中匹配出的内存容量大于第二内存差值时,结束内存分配。其中,所述第二内存差值为当前时刻业务内存剩余量与所述预设内存值的内存差值。具体地,本实施例首先将优先级别最高的内存申请请求作为待分配内存申请请求,并从当前时刻下的业务内存剩余量中匹配出与所述待分配内存申请请求对应的内存容量,作为待分配内存容量;然后将匹配出的待分配内存容量分配给待分配内存申请请求,以使待分配内存申请请求能够有足够内存执行对应的业务。同时,将其余优先级别的内存申请请求写入等待队列中。本实施例将其余优先级别的内存申请请求写入等待队列中时,可以按照重要性级别形成三个等待队列,即分别形成重要i级等待队列、重要ii级等待队列和重要iii级等待队列。再从等待队列中选择出优先级别最高的内存申请请求作为待分配内存申请请求,并按照上述内存分配方式继续进行内存分配,直至进行某一次内存分配时,从当前时刻下的业务内存剩余量中匹配出对应的内存容量后,所匹配出的内存容量大于第二内存差值,则表示在当前时刻下,如果要完成对应的内存分配,则剩余的业务内存容量会低于预设内存值,此时不符合内存分配的基本条件,所以此时就可以作为内存分配的结束条件,结束内存分配。
66.根据上述记载,在一示例性实施例中,将所述待分配内存容量分配至所述待分配内存申请请求所对应的业务线程后,该内存分配方法还包括:获取所述等待队列中每个内存申请请求的剩余等待时间和功能响应时间。将所述等待队列中每个内存申请请求的剩余
等待时间与功能响应时间进行比对,并获取剩余等待时间小于功能响应时间的内存申请请求,记为待调整内存申请请求;对所述待调整内存申请请求进行升级,提高所述待调整内存申请请求的时效性级别。其中,每个内存申请请求的剩余等待时间=预设超时时间-每个内存申请请求的等待时间,所述功能响应时间用于区分内存申请请求的时效性级别。具体地,当业务b所对应的内存申请请求c等待分配内存时,会对内存申请请求c的等待时间进行统计,并根据统计出的等待时间计算出剩余等待时间。其中,剩余等待时间等于设定的超时时间减去等待时间。当剩余等待时间逐渐缩短时,时效级别会被逐步升级。如图4所示,当剩余时间大于200毫秒(ms)时,级别不变;当剩余等待时间缩减到200毫秒(ms)以内时,若之前为时效iii级,则会被升级到时效ii级别;当剩余等待时间缩减到40毫秒(ms)以内时,若之前为时效ii级,则会被升级到时效i级别。
67.在一示例性实施例中,在获取当前时刻业务内存剩余量前,该内存分配方法还包括:判断占用内存容量的业务是否执行完毕;如果执行完毕,则调用对应业务的接口,释放对应业务所占用的内存容量,并把释放出的内存容量作为当前时刻业务内存剩余量中的部分内存容量;如果未执行完毕,则直接获取当前时刻业务内存剩余量。作为一示例,如图5所示,当业务使用完内存后,调用该接口释放占用的内存,利用释放的内存容量进行内存分配的过程可以是:
68.1)释放当前占用内存;
69.2)查看等待队列中是否有等待的内存申请请求,若无,则直接返回;否则,进入下一步;
70.3)依次查找重要i级等待队列、重要ii级等待队列或重要iii级等待队列,并返回含有等待申请的第一个队列;
71.4)遍历步骤3)中找出的等待队列,按照时效i级》时效ii级》时效iii级的原则,返回优先级别最高的内存申请任务xn;
72.5)唤醒内存申请任务xn,此时内存申请任务xn在内存申请的流程中被唤醒,开始对内存申请任务xn分配内存。
73.作为另一示例,如图6所示,当业务使用完内存后,调用该接口释放占用的内存,利用释放的内存容量进行内存分配的过程可以是:
74.1)当业务使用完内存后,调用内存释放接口释放系统内存;
75.2)判定重要级别qn队列是否存在;如果存在,则进入步骤3);如果不存在,则流程结束;
76.3)获取当前最重要级队列qn;
77.4)获取当前最重要级队列qn中时效性级别最高的任务;
78.5)唤醒所获取的任务,使其在内存申请流程中被唤醒,然后申请内存;
79.6)流程结束。
80.在一示例性实施例中,在获取多个内存申请请求前,该内存分配方法还包括:获取目标产品的所有业务,并为每个业务分配至少一个业务流程;以便所述目标产品在执行某个业务时,通过所述业务流程发起内存申请请求;其中,所述目标产品的业务包括以下至少之一:智能图片业务、用户抓图业务、智能分析业务。具体地,如图7所示,目标产品有智能图片、用户抓图和智能分析三块业务可能同时申请内存。智能图片业务是当智能分析识别到
目标后,对目标图像做编码保存;用户抓图业务为客户在界面点击抓图按钮后要立刻抓取当前画面保存;智能分析业务为以一定的帧率对视频码流做智能检测。本实施例从上述业务的重要性和时效性进行比较,分别标记各个业务的标签。例如,可以将智能图片业务标记为重要i级、时效ii级;用户抓图业务标记为重要i级、时效i级;智能分析业务标记为重要ii级、时效iii级。在完成业务标签的标记后,再进行内存申请,发起内存申请请求。同时,业务的标签可以作为内存申请请求的特性标记参考条件。例如智能图片业务的标签为重要i级、时效ii级,则基于智能图片业务生成的内存申请请求,对其进行重要性和时效性标记时,可以同样将对应的内存申请请求标记为重要i级、时效ii级。此外,本实施例对用户抓图业务和智能分析业务的内存申请请求进行重要性和时效性标记时,也可以参见上述方式,此处不再进行赘述。
81.在另一实施例中,如图8所示,本发明提供一种内存分配方法,该方法包括以下步骤:
82.根据不同业务功能预先配置内存需求的相关特性,所述相关特性例如时效性、重要性等。
83.根据特性对业务功能做内存特性标记;
84.当业务申请内存时,首先判定内存是否充足;
85.如果内存充足,则直接分配内存;
86.如果内存不充足,则触发内存自适应分配策略,则结合当前业务的内存标记,使用自适应分配策略分配内存。
87.具体地,如图9所示,某任务xn申请内存时的内存分配方法包括以下过程:
88.步骤1:判断当前时刻的剩余内存是否低于配置的水线(即最低业务内存剩余量);若否,则直接申请,并返回成功;否则,进入步骤2;
89.步骤2:在当前时刻的剩余内存低于所水线,触发自适应分配机制,并进入下一步骤3;
90.步骤3:判断任务xn的重要性级别在所有等待业务中是否为最高;如果是,则直接分配内存,并进入步骤4;否则,将其放入对应重要级别的等待队列。在本实施例中,等待队列有三个,分别保存重要i级、重要ii级、重要iii级的内存申请;
91.步骤4:进行内存分配,并判断是否分配成功;如果成功,则返回成功;否则,把当前内存请求放入对应重要级别的等待队列;
92.步骤5:判断重要n级的等待队列中的内存申请请求是否等待被唤醒或者等待超时唤醒,如果超时,则返回失败;否则,说明对应的内存申请请求得到内存分配权,此时将其唤醒,直接进行分配内存后返回。
93.由此可知,本实施例依据申请内存业务的重要性、时效性对业务做内存使用级别标记;当设备内存低于预设水线时,通过自适应机制优先给高级别业务分配内存;不同业务有内存申请超时时间标记,时效级别可以随时间减少提升;当超过最大等待时间时,判定本次申请失败,防止阻塞系统运作。
94.在另一实施例中,如图10所示,本发明提供一种内存分配方法,包括:为每个线程匹配一个业务,同时基于所述业务进行内存申请,判定内存是否充足,如果充足,则直接分配;如果不充足,则进入自适应内存分配机制。其中,内存申请的实现过程如图11所示。具体
地,
95.步骤

,判断当前剩余内存是否低于配置的水线,若否,则为正常申请,并直接分配内存;否则,进入步骤

;作为示例,本实施例中的水线的设定值可以取所有业务各内存需求最小值中的最大值,例如可以设置水线等于8mb大小。
96.步骤

,若当前剩余内存低于设定的水线,则判定当前内存申请是否为最重要级申请;如果是,则进入内存申请;如果不是,则结束流程;
97.步骤

,判断当前业务重要性级别在所有等待业务中是否为最高,如果是,则认为内存申请成功,并直接分配内存;否则,进入步骤

,把当前内存请求放入对应重要级别的等待队列qn;其中,等待队列有三个,分别为重要i级、重要ii级和重要iii级申请;
98.步骤

,对等待队列的内存申请请求按照图4中的流程进行时效级动态提升,直至其被唤醒;
99.步骤

,获取被唤醒的内存申请请求,并进行内存分配。
100.综上所述,本发明提供一种内存分配方法,首先获取多个内存申请请求、多个内存申请请求对应的内存需求总量以及当前时刻业务内存剩余量,然后计算内存需求总量与当前时刻业务内存剩余量的内存差值,记为第一内存差值;再将第一内存差值与预设内存值进行比较,并在第一内存差值小于等于预设内存值时,对每个内存申请请求进行内存分配;或者,在第一内存差值大于预设内存值时,对多个内存申请请求中的部分内存申请请求进行内存自适应分配。相当于本方法设计了一种自适应的内存分配方案,当业务内存剩余量充足时,直接为每个内存申请请求都分配对应的内存容量;当业务内存剩余量不足时,可以选择其中部分内存申请请求进行内存分配(例如对优先级别高的内存申请请求进行内存分配),从而能最大限度地保证目标产品在低内存状态下正常运作,以便解决现有图像拍摄产品在增加功能后内存不够用的问题。此外,本方法基于业务优先级的自适应内存分配机制,不仅可以保证内存不会低于预设水线时,而且还能按照客户配置保证重要功能稳定运行。同时,本方法依据申请内存业务的重要性、时效性对业务做内存使用级别标记;当设备内存低于预设水线时,通过自适应机制优先给高级别业务分配内存;而且,不同业务有内存申请超时时间标记,时效级别可以随时间减少提升;当超过最大等待时间时,本次申请失败,防止阻塞系统运作;也即本方法能够同时对级别较低的业务做级别提升和超时控制,防止阻塞系统运行。所以,通过本方法,在设备剩余内存低于预设水线时,优先给高优先级的业务分配内存,相比与目前先到先得的内存分配机制,本方法能保证系统重要功能不失效。同时,本方法通过标记不同业务的时效要求,对实时性要求比较高的业务优先分配内存,时效性低的延后分配;合理的利用了时效的特性,保证了各个业务均能在低内存状态下正常运作。
101.如图12所示,本发明还提供一种内存分配系统,该系统包括有:
102.采集模块m10,用于获取多个内存申请请求、所述多个内存申请请求对应的内存需求总量以及当前时刻业务内存剩余量;其中,内存申请请求由业务发起。
103.计算模块m20,用于计算所述内存需求总量与当前时刻业务内存剩余量的内存差值,记为第一内存差值;
104.比较模块m30,用于将所述第一内存差值与预设内存值进行比较;其中,本实施例中的预设内存值可以是最低业务内存剩余量,还可以是根据实际情况设定的内存值。同时,
本实施例中的预设内存值可以用水线或内存配置水线表示,即一些实施例或附图中描述的水线或内存配置水线,均可以表示为本实施例中的预设内存值。
105.内存分配模块m40,用于在所述第一内存差值小于等于所述预设内存值时,对每个内存申请请求进行内存分配;或者,在所述第一内存差值大于所述预设内存值时,对所述多个内存申请请求中的部分内存申请请求进行内存自适应分配。
106.由此可知,本实施例设计了一种自适应的内存分配方案,当业务内存剩余量充足时,直接为每个内存申请请求都分配对应的内存容量;当业务内存剩余量不足时,可以选择其中部分内存申请请求进行内存分配,例如对优先级别高的内存申请请求进行内存分配,从而能最大限度地保证目标产品在低内存状态下正常运作,以便解决现有图像拍摄产品在增加功能后内存不够用的问题。
107.根据上述记载,在一示例性实施例中,对所述多个内存申请请求中的部分内存申请请求进行内存自适应分配的过程包括:获取每个内存申请请求所对应的业务类型,并根据所述业务类型对每个内存申请请求进行特性标记;根据每个内存申请请求的特性标记结果,对所述多个内存申请请求中的部分内存申请请求进行内存自适应分配。具体地,根据所述业务类型对每个内存申请请求进行特性标记的过程包括:对每个内存申请请求所对应的业务类型进行重要性判断,并基于重要性判断结果对每个内存申请请求进行重要性级别标记;以及对每个内存申请请求所对应的业务类型进行时效性判断,并基于时效性判断结果对每个内存申请请求进行时效性级别标记;将每个内存申请请求的重要性级别标记和时效性级别标记进行结合,作为每个内存申请请求的特性标记结果。
108.作为一示例,本实施例可以将重要性级别分为三个级别,即重要i级、重要ii级和重要iii级,其中,重要i级的优先级别大于重要ii级,重要ii级的优先级别大于重要iii级。如图2所示,本实施例对每个内存申请请求进行重要性级别标记的过程可以是:对每个内存申请请求所对应的业务类型进行任务重要程度判断,确定业务类型的等级是紧急、重要还是其他;如果业务类型的重要程度等级是紧急,则对应内存申请请求的重要性级别标记为重要i级。如果业务类型的重要程度等级是重要,则对应内存申请请求的重要性级别标记为重要ii级。如果业务类型的重要程度等级是其他,则对应内存申请请求的重要性级别标记为重要iii级。其中,本实施例中重要程度等级的紧急、重要和其他可以根据实际情况进行设定,本实施例不做具体限制。
109.作为另一示例,本实施例可以将时效性级别分为三个级别,即时效i级、时效ii级和时效iii级,其中,时效i级的优先级别大于时效ii级,时效ii级的优先级别大于时效iii级。此外,本实施例中的重要性级别的优先级大于时效性级别,即重要iii级的优先级大于时效i级。如图3所示,本实施例对每个内存申请请求进行时效性级别标记的过程可以是:对每个内存申请请求所对应的业务类型进行任务时效程度判断,确定业务类型的功能响应时间与第一预设响应时间值、第二预设响应时间值的关系;其中,第一预设响应时间值小于第二预设响应时间值。如果内存申请请求a所对应的业务类型的功能响应时间小于第一预设响应时间值,则对内存申请请求a的时效性级别标记为时效i级。如果内存申请请求a所对应的业务类型的功能响应时间大于等于第一预设响应时间值,且小于第二预设响应时间值,则对内存申请请求a的时效性级别标记为时效ii级。如果内存申请请求a所对应的业务类型的功能响应时间小于第二预设响应时间值,则对内存申请请求a的时效性级别标记为时效
iii级。其中,第一预设响应时间值和第二预设响应时间值可以根据实际情况进行设定,本实施例不对数值做具体限定;例如,可以将第一预设响应时间值设定为40毫秒(ms),可以将第二预设响应时间值设定为200毫秒(ms)。
110.根据上述记载,在一示例性实施例中,根据每个内存申请请求的特性标记结果,对所述多个内存申请请求中的部分内存申请请求进行内存自适应分配的过程包括:按照每个内存申请请求的特性标记结果,对所述多个内存申请请求进行优先级判断;其中,重要性级别标记的优先级大于时效性级别标记。获取优先级别最高的内存申请请求作为待分配内存申请请求,并将其余优先级别的内存申请请求写入等待队列中。从当前时刻业务内存剩余量中匹配出与所述待分配内存申请请求对应的内存容量,作为待分配内存容量;将所述待分配内存容量分配至所述待分配内存申请请求所对应的业务线程,并按照优先级别继续为等待队列中的内存申请请求进行内存自适应分配,直至从当前时刻业务内存剩余量中匹配出的内存容量大于第二内存差值时,结束内存分配。其中,所述第二内存差值为当前时刻业务内存剩余量与所述预设内存值的内存差值。具体地,本实施例首先将优先级别最高的内存申请请求作为待分配内存申请请求,并从当前时刻下的业务内存剩余量中匹配出与所述待分配内存申请请求对应的内存容量,作为待分配内存容量;然后将匹配出的待分配内存容量分配给待分配内存申请请求,以使待分配内存申请请求能够有足够内存执行对应的业务。同时,将其余优先级别的内存申请请求写入等待队列中。本实施例将其余优先级别的内存申请请求写入等待队列中时,可以按照重要性级别形成三个等待队列,即分别形成重要i级等待队列、重要ii级等待队列和重要iii级等待队列。再从等待队列中选择出优先级别最高的内存申请请求作为待分配内存申请请求,并按照上述内存分配方式继续进行内存分配,直至进行某一次内存分配时,从当前时刻下的业务内存剩余量中匹配出对应的内存容量后,所匹配出的内存容量大于第二内存差值,则表示在当前时刻下,如果要完成对应的内存分配,则剩余的业务内存容量会低于预设内存值,此时不符合内存分配的基本条件,所以此时就可以作为内存分配的结束条件,结束内存分配。
111.根据上述记载,在一示例性实施例中,将所述待分配内存容量分配至所述待分配内存申请请求所对应的业务线程后,该内存分配系统还包括:获取所述等待队列中每个内存申请请求的剩余等待时间和功能响应时间。将所述等待队列中每个内存申请请求的剩余等待时间与功能响应时间进行比对,并获取剩余等待时间小于功能响应时间的内存申请请求,记为待调整内存申请请求;对所述待调整内存申请请求进行升级,提高所述待调整内存申请请求的时效性级别。其中,每个内存申请请求的剩余等待时间=预设超时时间-每个内存申请请求的等待时间,所述功能响应时间用于区分内存申请请求的时效性级别。具体地,当业务b所对应的内存申请请求c等待分配内存时,会对内存申请请求c的等待时间进行统计,并根据统计出的等待时间计算出剩余等待时间。其中,剩余等待时间等于设定的超时时间减去等待时间。当剩余等待时间逐渐缩短时,时效级别会被逐步升级。如图4所示,当剩余时间大于200毫秒(ms)时,级别不变;当剩余等待时间缩减到200毫秒(ms)以内时,若之前为时效iii级,则会被升级到时效ii级别;当剩余等待时间缩减到40毫秒(ms)以内时,若之前为时效ii级,则会被升级到时效i级别。
112.在一示例性实施例中,在获取当前时刻业务内存剩余量前,该内存分配系统还包括:判断占用内存容量的业务是否执行完毕;如果执行完毕,则调用对应业务的接口,释放
对应业务所占用的内存容量,并把释放出的内存容量作为当前时刻业务内存剩余量中的部分内存容量;如果未执行完毕,则直接获取当前时刻业务内存剩余量。作为一示例,如图5所示,当业务使用完内存后,调用该接口释放占用的内存,利用释放的内存容量进行内存分配的过程可以是:
113.1)释放当前占用内存;
114.2)查看等待队列中是否有等待的内存申请请求,若无,则直接返回;否则,进入下一步;
115.3)依次查找重要i级等待队列、重要ii级等待队列或重要iii级等待队列,并返回含有等待申请的第一个队列;
116.4)遍历步骤3)中找出的等待队列,按照时效i级》时效ii级》时效iii级的原则,返回优先级别最高的内存申请任务xn;
117.5)唤醒内存申请任务xn,此时内存申请任务xn在内存申请的流程中被唤醒,开始对内存申请任务xn分配内存。
118.作为另一示例,如图6所示,当业务使用完内存后,调用该接口释放占用的内存,利用释放的内存容量进行内存分配的过程可以是:
119.1)当业务使用完内存后,调用内存释放接口释放系统内存;
120.2)判定重要级别qn队列是否存在;如果存在,则进入步骤3);如果不存在,则流程结束;
121.3)获取当前最重要级队列qn;
122.4)获取当前最重要级队列qn中时效性级别最高的任务;
123.5)唤醒所获取的任务,使其在内存申请流程中被唤醒,然后申请内存;
124.6)流程结束。
125.在一示例性实施例中,在获取多个内存申请请求前,该内存分配系统还包括:获取目标产品的所有业务,并为每个业务分配至少一个业务流程;以便所述目标产品在执行某个业务时,通过所述业务流程发起内存申请请求;其中,所述目标产品的业务包括以下至少之一:智能图片业务、用户抓图业务、智能分析业务。具体地,如图7所示,目标产品有智能图片、用户抓图和智能分析三块业务可能同时申请内存。智能图片业务是当智能分析识别到目标后,对目标图像做编码保存;用户抓图业务为客户在界面点击抓图按钮后要立刻抓取当前画面保存;智能分析业务为以一定的帧率对视频码流做智能检测。本实施例从上述业务的重要性和时效性进行比较,分别标记各个业务的标签。例如,可以将智能图片业务标记为重要i级、时效ii级;用户抓图业务标记为重要i级、时效i级;智能分析业务标记为重要ii级、时效iii级。在完成业务标签的标记后,再进行内存申请,发起内存申请请求。同时,业务的标签可以作为内存申请请求的特性标记参考条件。例如智能图片业务的标签为重要i级、时效ii级,则基于智能图片业务生成的内存申请请求,对其进行重要性和时效性标记时,可以同样将对应的内存申请请求标记为重要i级、时效ii级。此外,本实施例对用户抓图业务和智能分析业务的内存申请请求进行重要性和时效性标记时,也可以参见上述方式,此处不再进行赘述。
126.综上所述,本发明提供一种内存分配系统,首先获取多个内存申请请求、多个内存申请请求对应的内存需求总量以及当前时刻业务内存剩余量,然后计算内存需求总量与当
前时刻业务内存剩余量的内存差值,记为第一内存差值;再将第一内存差值与预设内存值进行比较,并在第一内存差值小于等于预设内存值时,对每个内存申请请求进行内存分配;或者,在第一内存差值大于预设内存值时,对多个内存申请请求中的部分内存申请请求进行内存自适应分配。相当于本系统设计了一种自适应的内存分配方案,当业务内存剩余量充足时,直接为每个内存申请请求都分配对应的内存容量;当业务内存剩余量不足时,可以选择其中部分内存申请请求进行内存分配(例如对优先级别高的内存申请请求进行内存分配),从而能最大限度地保证目标产品在低内存状态下正常运作,以便解决现有图像拍摄产品在增加功能后内存不够用的问题。此外,本系统基于业务优先级的自适应内存分配机制,不仅可以保证内存不会低于预设水线时,而且还能按照客户配置保证重要功能稳定运行。同时,本系统依据申请内存业务的重要性、时效性对业务做内存使用级别标记;当设备内存低于预设水线时,通过自适应机制优先给高级别业务分配内存;而且,不同业务有内存申请超时时间标记,时效级别可以随时间减少提升;当超过最大等待时间时,本次申请失败,防止阻塞系统运作;也即本系统能够同时对级别较低的业务做级别提升和超时控制,防止阻塞系统运行。所以,通过本系统,在设备剩余内存低于预设水线时,优先给高优先级的业务分配内存,相比与目前先到先得的内存分配机制,本系统能保证系统重要功能不失效。同时,本系统通过标记不同业务的时效要求,对实时性要求比较高的业务优先分配内存,时效性低的延后分配;合理的利用了时效的特性,保证了各个业务均能在低内存状态下正常运作。
127.本技术实施例还提供了一种计算机设备,该设备可以包括:一个或多个处理器;和其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述设备执行图1所述的方法。图13示出了一种计算机设备1000的结构示意图。参阅图13所示,计算机设备1000包括:处理器1010、存储器1020、电源1030、显示单元1040、输入单元1060。
128.处理器1010是计算机设备1000的控制中心,利用各种接口和线路连接各个部件,通过运行或执行存储在存储器1020内的软件程序和/或数据,执行计算机设备1000的各种功能,从而对计算机设备1000进行整体监控。本技术实施例中,处理器1010调用存储器1020中存储的计算机程序时执行如图1所述的方法。可选的,处理器1010可包括一个或多个处理单元;优选的,处理器1010可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用等,调制解调处理器主要处理无线通信。在一些实施例中,处理器、存储器、可以在单一芯片上实现,在一些实施例中,它们也可以在独立的芯片上分别实现。
129.存储器1020可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、各种应用等;存储数据区可存储根据计算机设备1000的使用所创建的数据等。此外,存储器1020可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件等。
130.计算机设备1000还包括给各个部件供电的电源1030(比如电池),电源可以通过电源管理系统与处理器1010逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗等功能。
131.显示单元1040可用于显示由用户输入的信息或提供给用户的信息以及计算机设
备1000的各种菜单等,本发明实施例中主要用于显示计算机设备1000中各应用的显示界面以及显示界面中显示的文本、图片等对象。显示单元1040可以包括显示面板1050。显示面板1050可以采用液晶显示屏(liquid crystal display,lcd)、有机发光二极管(organic light-emitting diode,oled)等形式来配置。
132.输入单元1060可用于接收用户输入的数字或字符等信息。输入单元1060可包括触控面板1070以及其他输入设备1080。其中,触控面板1070,也称为触摸屏,可收集用户在其上或附近的触摸操作(比如用户使用手指、触摸笔等任何适合的物体或附件在触控面板1070上或在触控面板1070附近的操作)。
133.具体的,触控面板1070可以检测用户的触摸操作,并检测触摸操作带来的信号,将这些信号转换成触点坐标,发送给处理器1010,并接收处理器1010发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板1070。其他输入设备1080可以包括但不限于物理键盘、功能键(比如音量控制按键、开关机按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
134.当然,触控面板1070可覆盖显示面板1050,当触控面板1070检测到在其上或附近的触摸操作后,传送给处理器1010以确定触摸事件的类型,随后处理器1010根据触摸事件的类型在显示面板1050上提供相应的视觉输出。虽然在图13中,触控面板1070与显示面板1050是作为两个独立的部件来实现计算机设备1000的输入和输出功能,但是在某些实施例中,可以将触控面板1070与显示面板1050集成而实现计算机设备1000的输入和输出功能。
135.计算机设备1000还可包括一个或多个传感器,例如压力传感器、重力加速度传感器、接近光传感器等。当然,根据具体应用中的需要,上述计算机设备1000还可以包括摄像头等其它部件。
136.本技术实施例还提供了一种计算机可读存储介质,该存储介质中存储有指令,当一个或多个处理器执行所述指令时,使得上述设备能够执行本技术中如图1所述的方法。
137.本领域技术人员可以理解的是,图13仅仅是计算机设备的举例,并不构成对该设备的限定,该设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件。为了描述的方便,以上各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本技术时,可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。
138.本领域内的技术人员应明白,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的,应理解为可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。这些计算机程序指令可应用至通用计算机、专用计算机、嵌入式处理机或其他可编程内存分配设备的处理器中以产生一个机器,使得通过计算机或其他可编程内存分配设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程内存分配设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程
内存分配设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
139.应当理解的是,尽管在本发明实施例中可能采用术语第一、第二、第三等来描述预设范围等,但这些预设范围不应限于这些术语。这些术语仅用来将预设范围彼此区分开。例如,在不脱离本发明实施例范围的情况下,第一预设范围也可以被称为第二预设范围,类似地,第二预设范围也可以被称为第一预设范围。
140.上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献