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

一种数据处理方法、装置、网络设备及可读存储介质与流程

2023-03-02 01:40:54 来源:中国专利 TAG:


1.本发明涉及工业物联网与数据处理领域,特别是指一种数据处理方法、装置、网络设备及可读存储介质。


背景技术:

2.随着5g和物联网技术的高速发展,嵌入式设备的数据传输能力得到了提升,可满足工业场景数据的高速传输与低时延需求。在工业领域中,可使用嵌入式设备实时采集数据并传输给服务器,需要保证上传数据的实时性与完整性。由于嵌入式设备中内存资源有限,应用中通常使用环形缓冲区进行数据缓存,环形缓冲区能够高效利用存储空间。
3.然而,由于环形缓冲区是一个静态申请的存储空间,一旦瞬时数据量增加会出现数据写入速率大于数据读取速率的情况,导致高速数据场景中难以保证数据的完整性。
4.在现有的技术方案中,主要有以下两种方案:一,分配一个较大的静态环形缓冲区,但这种方法易造成资源浪费;二,当环形缓冲区空间不够时,申请一个更大的静态缓冲区,并将原有缓冲区中的数据拷贝至新申请的环形缓冲区中,该方案中新申请的缓冲区大小无法确定或难以动态修改,且存在额外的数据拷贝开销,降低设备数据处理效率。
5.另外的部分方案中,当环形缓冲区空间不足时,将以默认大小新建缓冲区。待环形缓冲区的数据被读出后,将新建的缓冲区中的数据拷贝至环形缓冲区,并释放掉新建的缓冲区。该方案中,由于申请的环形缓冲区大小为固定值,需要长时间维护多个环形缓冲区,引入了额外的维护成本。
6.总而言之,现有技术中环形缓冲区的数据处理方案存在存储资源利用率低、数据读取效率低的问题。


技术实现要素:

7.本发明的目的是提供一种数据处理方法、装置、网络设备及可读存储介质,解决了现有技术中环形缓冲区的数据处理方法存在资源利用率较低的问题。
8.为达到上述目的,本发明的实施例提供一种数据处理方法,包括:
9.在第一环形缓冲区满足预设条件的情况下,根据所述第一环形缓冲区的第一负载值,申请第二环形缓冲区,并通过链表形式链接所述第一环形缓冲区和所述第二环形缓冲区;
10.将待写入数据写入所述第一环形缓冲区和/或所述第二环形缓冲区;
11.其中,所述第一负载值与所述第一环形缓冲区在不同时间对应的负载信息相关,所述负载信息与所述第一环形缓冲区的总长度相关。
12.可选地,所述预设条件包括以下至少一项:
13.检测到待写入数据,且所述第一环形缓冲区的剩余长度小于所述待写入数据的长度;
14.周期性获取所述第一环形缓冲区的第一负载值,且获取到的所述第一负载值小于
预设负载值。
15.可选地,获取所述第一环形缓冲区的第一负载值,包括:
16.获取负载信息队列中的负载信息;其中,所述负载信息队列中存储有m组所述第一环形缓冲区对应的负载信息;每组所述负载信息对应的时间不同;
17.获取m组所述负载信息的平均值,得到所述第一负载值。
18.可选地,在所述获取负载信息队列中的负载信息之前,所述数据写入方法还包括:
19.建立所述负载信息队列;
20.根据当前待读取数据的长度、待写入数据的长度和所述第一环形缓冲区的总长度,得到所述负载信息;
21.将所述负载信息存储至所述负载信息队列中。
22.可选地,在检测到待写入数据,且所述第一环形缓冲区的剩余长度小于所述待写入数据的长度的情况下,所述根据所述第一环形缓冲区的第一负载值,申请第二环形缓冲区,包括:
23.根据所述第一负载值,确定第二环形缓冲区的第一总长度;
24.申请具有所述第一总长度的第二环形缓冲区。
25.可选地,在周期性获取所述第一环形缓冲区的第一负载值,且获取到的所述第一负载值小于预设负载值的情况下,所述根据所述第一环形缓冲区的第一负载值,申请第二环形缓冲区,包括:
26.根据所述第一负载值,确定第二环形缓冲区的第一总长度;
27.根据所述第一总长度与初始静态缓冲区长度的大小关系,申请第二环形缓冲区。
28.可选地,所述根据所述第一总长度与初始静态缓冲区长度的大小关系,申请第二环形缓冲区,包括:
29.在所述第一总长度小于或等于所述初始静态缓冲区长度的情况下,申请具有所述初始静态缓冲区长度的第二环形缓冲区;
30.在所述第一总长度大于所述初始静态缓冲区长度的情况下,申请具有所述第一总长度的第二环形缓冲区。
31.可选地,所述通过链表形式链接所述第一环形缓冲区和所述第二环形缓冲区,包括:
32.将所述第一环形缓冲区的尾指针指向所述第二环形缓冲区的头指针。
33.可选地,所述数据处理方法还包括:
34.在所述第一环形缓冲区中的数据读取完成的情况下,释放所述第一环形缓冲区;
35.读取所述第二环形缓冲区中的数据。
36.可选地,在检测到待写入数据,且所述第一环形缓冲区的剩余长度小于所述待写入数据的长度的情况下,所述将待写入数据写入所述第一环形缓冲区和/或所述第二环形缓冲区,包括:
37.将所述待写入数据写入所述第一环形缓冲区;
38.在写满所述第一环形缓冲区后,对所述第二环形缓冲区进行初始化;
39.将待写入数据中未写入所述第一环形缓冲区的剩余部分写入至所述第二环形缓冲区中。
40.可选地,在周期性获取所述第一环形缓冲区的第一负载值,且获取到的所述第一负载值小于预设负载值的情况下,所述将待写入数据写入所述第一环形缓冲区和/或所述第二环形缓冲区,包括:
41.对所述第二环形缓冲区进行初始化;
42.将待写入数据写入所述第二环形缓冲区。
43.可选地,所述对所述第二环形缓冲区进行初始化,包括:
44.对所述第二环形缓冲区的读取数据位置信息和/或写入数据位置信息进行初始化。
45.为达到上述目的,本发明的实施例提供一种网络设备,包括处理器和收发机,其中,所述处理器用于:
46.在第一环形缓冲区满足预设条件的情况下,根据所述第一环形缓冲区的第一负载值,申请第二环形缓冲区,并通过链表形式链接所述第一环形缓冲区和所述第二环形缓冲区;
47.将待写入数据写入所述第一环形缓冲区和/或所述第二环形缓冲区;
48.其中,所述第一负载值与所述第一环形缓冲区在不同时间对应的负载信息相关,所述负载信息与所述第一环形缓冲区的总长度相关。
49.可选地,所述预设条件包括以下至少一项:
50.检测到待写入数据,且所述第一环形缓冲区的剩余长度小于所述待写入数据的长度;
51.周期性获取所述第一环形缓冲区的第一负载值,且获取到的所述第一负载值小于预设负载值。
52.可选地,所述处理器在获取所述第一环形缓冲区的第一负载值时,具体用于:
53.获取负载信息队列中的负载信息;其中,所述负载信息队列中存储有m组所述第一环形缓冲区对应的负载信息;每组所述负载信息对应的时间不同;
54.获取m组所述负载信息的平均值,得到所述第一负载值。
55.可选地,所述处理器在所述获取负载信息队列中的负载信息之前,还用于:
56.建立所述负载信息队列;
57.根据当前待读取数据的长度、待写入数据的长度和所述第一环形缓冲区的总长度,得到所述负载信息;
58.将所述负载信息存储至所述负载信息队列中。
59.可选地,在检测到待写入数据,且所述第一环形缓冲区的剩余长度小于所述待写入数据的长度的情况下,所述处理器在根据所述第一环形缓冲区的第一负载值,申请第二环形缓冲区时,具体用于:
60.根据所述第一负载值,确定第二环形缓冲区的第一总长度;
61.申请具有所述第一总长度的第二环形缓冲区。
62.可选地,在周期性获取所述第一环形缓冲区的第一负载值,且获取到的所述第一负载值小于预设负载值的情况下,所述处理器在根据所述第一环形缓冲区的第一负载值,申请第二环形缓冲区时,具体用于:
63.根据所述第一负载值,确定第二环形缓冲区的第一总长度;
64.根据所述第一总长度与初始静态缓冲区长度的大小关系,申请第二环形缓冲区。
65.可选地,所述处理器在根据所述第一总长度与初始静态缓冲区长度的大小关系,申请第二环形缓冲区时,具体用于:
66.在所述第一总长度小于或等于所述初始静态缓冲区长度的情况下,申请具有所述初始静态缓冲区长度的第二环形缓冲区;
67.在所述第一总长度大于所述初始静态缓冲区长度的情况下,申请具有所述第一总长度的第二环形缓冲区。
68.可选地,所述处理器在通过链表形式链接所述第一环形缓冲区和所述第二环形缓冲区时,具体用于:
69.将所述第一环形缓冲区的尾指针指向所述第二环形缓冲区的头指针。
70.可选地,所述处理器还用于:
71.在所述第一环形缓冲区中的数据读取完成的情况下,释放所述第一环形缓冲区;
72.读取所述第二环形缓冲区中的数据。
73.可选地,在检测到待写入数据,且所述第一环形缓冲区的剩余长度小于所述待写入数据的长度的情况下,所述处理器在将待写入数据写入所述第一环形缓冲区和/或所述第二环形缓冲区时,具体用于:
74.将所述待写入数据写入所述第一环形缓冲区;
75.在写满所述第一环形缓冲区后,对所述第二环形缓冲区进行初始化;
76.将待写入数据中未写入所述第一环形缓冲区的剩余部分写入至所述第二环形缓冲区中。
77.可选地,在周期性获取所述第一环形缓冲区的第一负载值,且获取到的所述第一负载值小于预设负载值的情况下,所述处理器在将待写入数据写入所述第一环形缓冲区和/或所述第二环形缓冲区时,具体用于:
78.对所述第二环形缓冲区进行初始化;
79.将待写入数据写入所述第二环形缓冲区。
80.可选地,所述处理器在对所述第二环形缓冲区进行初始化时,具体用于:
81.对所述第二环形缓冲区的读取数据位置信息和/或写入数据位置信息进行初始化。
82.为达到上述目的,本发明的实施例提供一种数据处理装置,包括:
83.申请模块,用于在第一环形缓冲区满足预设条件的情况下,根据所述第一环形缓冲区的第一负载值,申请第二环形缓冲区,并通过链表形式链接所述第一环形缓冲区和所述第二环形缓冲区;
84.写入模块,用于将待写入数据写入所述第一环形缓冲区和/或所述第二环形缓冲区;
85.其中,所述第一负载值与所述第一环形缓冲区在不同时间对应的负载信息相关,所述负载信息与所述第一环形缓冲区的总长度相关。
86.可选地,所述预设条件包括以下至少一项:
87.检测到待写入数据,且所述第一环形缓冲区的剩余长度小于所述待写入数据的长度;
88.周期性获取所述第一环形缓冲区的第一负载值,且获取到的所述第一负载值小于预设负载值。
89.可选地,所述申请模块包括:
90.第一获取单元,用于获取负载信息队列中的负载信息;其中,所述负载信息队列中存储有m组所述第一环形缓冲区对应的负载信息;每组所述负载信息对应的时间不同;
91.第二获取单元,用于获取m组所述负载信息的平均值,得到所述第一负载值。
92.可选地,所述数据写入装置还包括:
93.队列建立模块,用于建立所述负载信息队列;
94.信息处理模块,用于根据当前待读取数据的长度、待写入数据的长度和所述第一环形缓冲区的总长度,得到所述负载信息;
95.信息存储模块,用于将所述负载信息存储至所述负载信息队列中。
96.可选地,所述申请模块还包括:
97.第一确定单元,用于根据所述第一负载值,确定第二环形缓冲区的第一总长度;
98.第一申请单元,用于申请具有所述第一总长度的第二环形缓冲区。
99.可选地,所述申请模块还包括:
100.第二确定单元,用于根据所述第一负载值,确定第二环形缓冲区的第一总长度;
101.第二申请单元,用于根据所述第一总长度与初始静态缓冲区长度的大小关系,申请第二环形缓冲区。
102.可选地,所述第二申请单元包括:
103.第一申请子单元,用于在所述第一总长度小于或等于所述初始静态缓冲区长度的情况下,申请具有所述初始静态缓冲区长度的第二环形缓冲区;
104.第二申请子单元,用于在所述第一总长度大于所述初始静态缓冲区长度的情况下,申请具有所述第一总长度的第二环形缓冲区。
105.可选地,所述申请模块还包括:
106.第一处理单元,用于将所述第一环形缓冲区的尾指针指向所述第二环形缓冲区的头指针。
107.可选地,所述数据处理装置还包括:
108.释放模块,用于在所述第一环形缓冲区中的数据读取完成的情况下,释放所述第一环形缓冲区;
109.读取模块,用于读取所述第二环形缓冲区中的数据。
110.可选地,所述写入模块包括:
111.第一写入单元,用于将所述待写入数据写入所述第一环形缓冲区;
112.第一初始化单元,用于在写满所述第一环形缓冲区后,对所述第二环形缓冲区进行初始化;
113.第二写入单元,用于将待写入数据中未写入所述第一环形缓冲区的剩余部分写入至所述第二环形缓冲区中。
114.可选地,所述写入模块还包括:
115.第二初始化单元,用于对所述第二环形缓冲区进行初始化;
116.第三写入单元,用于将待写入数据写入所述第二环形缓冲区。
117.可选地,所述第二初始化单元包括:
118.初始化子单元,用于对所述第二环形缓冲区的读取数据位置信息和/或写入数据位置信息进行初始化。
119.为达到上述目的,本发明的实施例提供一种网络设备,包括收发器、处理器、存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令;所述处理器执行所程序或指令时实现如上所述的数据处理方法。
120.为达到上述目的,本发明的实施例提供一种可读存储介质,其上存储有程序或指令,所述程序或指令被处理器执行时实现如上所述的数据处理方法中的步骤。
121.本发明的上述技术方案的有益效果如下:
122.本发明实施例的方法,在当前环形缓冲区满足预设条件时,可以根据当前缓冲区的负载情况申请新的环形缓冲区,从而满足环形缓冲区的数据处理需求,能够适配当前数据写入和读取速率,提高了资源利用率,提升了设备的处理效率。
附图说明
123.图1为本发明实施例的数据处理方法的流程图;
124.图2为本发明实施例的环形缓冲区的结构示意图;
125.图3为本发明实施例的环形缓冲区数据处理(写入)流程示意图;
126.图4为本发明实施例的环形缓冲区数据处理(读取)流程示意图;
127.图5为本发明实施例的环形缓冲区的低负载检测与动态调整流程示意图;
128.图6为本发明实施例的环形缓冲区数据处理装置示意图;
129.图7为本发明实施例的网络设备的结构图;
130.图8为本发明实施例的数据处理装置的结构图;
131.图9为本发明另一实施例的网络设备的结构图。
具体实施方式
132.为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
133.应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。
134.在本发明的各种实施例中,应理解,下述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
135.另外,本文中术语“系统”和“网络”在本文中常可互换使用。
136.在本技术所提供的实施例中,应理解,“与a相应的b”表示b与a 相关联,根据a可以确定b。但还应理解,根据a 确定b并不意味着仅仅根据a确定b,还可以根据a和/或其它信息确定b。
137.如图1所示,本发明实施例的一种数据处理方法,包括:
138.在第一环形缓冲区满足预设条件的情况下,根据所述第一环形缓冲区的第一负载值,申请第二环形缓冲区,并通过链表形式链接所述第一环形缓冲区和所述第二环形缓冲区;
139.将待写入数据写入所述第一环形缓冲区和/或所述第二环形缓冲区;
140.其中,所述第一负载值与所述第一环形缓冲区在不同时间对应的负载信息相关,所述负载信息与所述第一环形缓冲区的总长度相关。
141.该实施例中,动态请求的环形缓冲区(即第二环形缓冲区)的结构大小不是固定的,而是根据当前环形缓冲区的负载情况计算的,这样,基于缓冲区负载情况动态申请的环形缓冲区能够适配当前的数据速率(即数据读取或写入速率),可以避免由于频繁申请缓存空间或者申请的环形缓冲区空间过大而造成的资源利用率低的问题。
142.可选地,所述预设条件包括以下至少一项:
143.(一)检测到待写入数据,且所述第一环形缓冲区的剩余长度小于所述待写入数据的长度。
144.也就是说,在当前环形缓冲区空间(即第一环形缓冲区)不足以存储当前数据量时,通过对当前缓冲区的负载情况进行分析,并根据分析结果申请新的环形缓冲区,新申请的环形缓冲区(即第二环形缓冲区)与原环形缓冲区(即第一环形缓冲区)之间通过链表方式进行链接。
145.具体的,可以根据当前环形缓冲区中的读取数据位置变量与写入数据位置变量,来实时获取当前环形缓冲区的剩余长度,从而根据该剩余长度与待写入数据的长度进行对比,判断当前环形缓冲区的存储状态(即判断是否足够存储待写入数据):
146.若当前缓冲区为可完全存储状态,即当前环形缓冲区剩余长度大于或等于待写入数据长度的情况,则可以按照正常情况缓存数据;
147.若当前缓冲区为不可完全存储状态(即当前环形缓冲区空间不足以存储待写入数据),即当前环形缓冲区剩余长度小于待写入数据长度的情况,则可以根据负载信息计算结果来动态申请的环形缓冲区。这样,当原环形缓冲区写满数据后,可以将剩余的待写入数据写入至新申请的环形缓冲区(即第二环形缓冲区)中,当原环形缓冲区数据读取完成时即可释放资源(即释放原环形缓冲区)。
148.(二)周期性获取所述第一环形缓冲区的第一负载值,且获取到的所述第一负载值小于预设负载值。
149.也就是说,可以定时对当前环形缓冲区(例如当前环形缓冲区为第一环形缓冲区)的负载信息进行分析,得到第一负载值,并根据第一负载值判断当前环形缓冲区为是否为低负载状态(即不饱和状态),其中:
150.若当前环形缓冲区处于饱和状态,则正常进行数据存储操作;
151.若当前环形缓冲区处于不饱和状态(即第一环形缓冲区的第一负载值小于预设负载值的情况),则通过负载队列中的负载信息计算第一负载值,并根据第一负载值动态申请空间更小的新的环形缓冲区,从而将待写入数据写入至新申请的环形缓冲区中,当原环形缓冲区中的数据读取完成后即可释放资源。
152.可选地,获取所述第一环形缓冲区的第一负载值,包括:
153.获取负载信息队列中的负载信息;其中,所述负载信息队列中存储有m组所述第一
环形缓冲区对应的负载信息;每组所述负载信息对应的时间不同;
154.获取m组所述负载信息的平均值,得到所述第一负载值。
155.可选地,在所述获取负载信息队列中的负载信息之前,所述数据写入方法还包括:
156.建立所述负载信息队列;
157.根据当前待读取数据的长度、待写入数据的长度和所述第一环形缓冲区的总长度,得到所述负载信息;
158.将所述负载信息存储至所述负载信息队列中。
159.该实施例中,通过建立环形缓冲区的负载信息队列,可以存储环形缓冲区的负载信息。具体的,可以将环形缓冲区的负载信息存入预设长度的负载信息队列中,如负载信息队列已满则先出队再存储。
160.可选地,在检测到待写入数据,且所述第一环形缓冲区的剩余长度小于所述待写入数据的长度的情况下,所述根据所述第一环形缓冲区的第一负载值,申请第二环形缓冲区,包括:
161.根据所述第一负载值,确定第二环形缓冲区的第一总长度;
162.申请具有所述第一总长度的第二环形缓冲区。
163.该实施例中,在当前环形缓冲区的剩余长度不足以完全写入待写入数据时,可以基于负载信息队列中的负载信息、待写入数据的长度和当前环形缓冲区的总长度,来申请新的环形缓冲区。如此,新的环形缓冲区不仅能够满足用户的需求,而且不会造成存储资源的浪费。此外,通过在原环形缓冲区中的数据读取完毕时释放原环形缓冲区,能够实现申请新环形缓冲区、释放原有环形缓冲区这种动态调整环形缓冲区的模式,避免了现有技术中的数据拷贝开销。
164.可选地,在周期性获取所述第一环形缓冲区的第一负载值,且获取到的所述第一负载值小于预设负载值的情况下,所述根据所述第一环形缓冲区的第一负载值,申请第二环形缓冲区,包括:
165.根据所述第一负载值,确定第二环形缓冲区的第一总长度;
166.根据所述第一总长度与初始静态缓冲区长度的大小关系,申请第二环形缓冲区。
167.该实施例中,动态生成的环形缓冲区的大小(即第二环形缓冲区的第一总长度),可以根据当前环形缓冲区的负载情况计算获得,因此,动态生成的环形缓冲区的大小能够适配当前数据的存储与处理(即读取)速率,当动态生成的环形缓冲区适应当前数据的存储与处理速率后,只需要维护新申请的环形缓冲区(即第二环形缓冲区)即可,能够避免申请或维护过多环形缓冲区,降低了维护成本。
168.可选地,所述根据所述第一总长度与初始静态缓冲区长度的大小关系,申请第二环形缓冲区,包括:
169.在所述第一总长度小于或等于所述初始静态缓冲区长度的情况下,申请具有所述初始静态缓冲区长度的第二环形缓冲区;
170.在所述第一总长度大于所述初始静态缓冲区长度的情况下,申请具有所述第一总长度的第二环形缓冲区。
171.该实施例中,新申请的环形缓冲区(即第二环形缓冲区)的长度,不能小于初始静态缓冲区长度。其中,初始静态缓冲区长度为初始配置的环形缓冲区的长度。
172.可选地,所述通过链表形式链接所述第一环形缓冲区和所述第二环形缓冲区,包括:
173.将所述第一环形缓冲区的尾指针指向所述第二环形缓冲区的头指针。
174.该实施例中,可以将原环形缓冲区(即第一环形缓冲区)的尾指针指向动态申请的环形缓冲区(即第二环形缓冲区)的头指针,从而以链表形式链接两个环形缓冲区,以便在写满原环形缓冲区后向动态申请的环形缓冲区中写入数据,以及在原环形缓冲区中的数据读取完之后,继续读取动态申请的环形缓冲区中的数据。
175.如图2所示,为环形缓冲区的结构示意图。其中,read与write分别为环形缓冲区当前的读取位置变量与写入位置变量,通过write与read的变量值可以来计算当前环形缓冲区的剩余可存储空间大小(即剩余长度)。链表头指针(pheader)指向环形缓冲区,当需要动态申请新的环形缓冲区时,将原环形缓冲区的链表尾指针(ptail)指向新申请的环形缓冲区的链表头指针,环形缓冲区之间通过链表的形式进行链接。其中,size为环形缓冲区的大小(即总长度)。
176.可选地,所述数据处理方法还包括:
177.在所述第一环形缓冲区中的数据读取完成的情况下,释放所述第一环形缓冲区;
178.读取所述第二环形缓冲区中的数据。
179.该实施例中,两个环形缓冲区之间通过链表形式链接,读取数据时,首先读取原环形缓冲区(即第一环形缓冲区)中的缓存数据,当原环形缓冲区中的数据全部读取完成之后,可以释放原环形缓冲区资源,并根据尾指针跳转至动态申请的环形缓冲区(即第二环形缓冲区)中继续读取,从而保证缓存过程中数据的完整性,通过动态释放不必要的环形缓冲区资源,能够合理地利用内存资源,提高系统内存空间利用率。
180.需要说明的是,本发明实施例中,数据在缓存过程中不需要额外将部分数据从动态申请的环形缓冲区高拷贝至静态环形缓冲区,提升了数据读取效率,,有利于提升设备的处理效率,避免了数据拷贝开销。
181.可选地,在检测到待写入数据,且所述第一环形缓冲区的剩余长度小于所述待写入数据的长度的情况下,所述将待写入数据写入所述第一环形缓冲区和/或所述第二环形缓冲区,包括:
182.将所述待写入数据写入所述第一环形缓冲区;
183.在写满所述第一环形缓冲区后,对所述第二环形缓冲区进行初始化;
184.将待写入数据中未写入所述第一环形缓冲区的剩余部分写入至所述第二环形缓冲区中。
185.需要说明的是,在将待写入数据的剩余部分写入至动态申请的环形缓冲区(即第二环形缓冲区)中之后,需要更新该环形缓冲区的数据写入位置信息。
186.可选地,在周期性获取所述第一环形缓冲区的第一负载值,且获取到的所述第一负载值小于预设负载值的情况下,所述将待写入数据写入所述第一环形缓冲区和/或所述第二环形缓冲区,包括:
187.对所述第二环形缓冲区进行初始化;
188.将待写入数据写入所述第二环形缓冲区。
189.该实施例中,可以通过将原环形缓冲区的尾指针指向新申请的环形缓冲区的头指
针将两个环形缓冲区进行链接,后续将待写入数据缓存至新申请的环形缓冲区中,这样,在原环形缓冲区中的数据读取完成后,可以通过尾指针设置链接至新申请的环形缓冲区中继续读取待读取数据,并释放原环形缓冲区,之后,只需要维护新申请的环形缓冲区即可,而不需要维护多个环形缓冲区,能够节省成本开销。
190.可选地,所述对所述第二环形缓冲区进行初始化,包括:
191.对所述第二环形缓冲区的读取数据位置信息和/或写入数据位置信息进行初始化。
192.这里,初始化动态申请的环形缓冲区(即第二环形缓冲区)后,即可对环形缓冲区进行读写操作。其中,读取数据位置信息即读取数据位置变量,写入数据位置信息即写入数据位置变量。
193.下面对本技术实施例提供的方案进行具体举例说明。
194.如图3所示,为环形缓冲区数据处理(写入)流程示意图,具体的:
195.步骤301,检测到待写入数据。
196.步骤302,计算当前环形缓冲区(例如第一环形缓冲区)的剩余空间(即剩余长度)。
197.该步骤中,当前写入的环形缓冲区中的读取数据位置变量(即w.pheader.read)大于写入数据位置变量(即w.pheader.write)时,剩余长度=
198.w.pheader.size-(w.pheader.read-w.pheader.write);
199.当读取数据位置变量小于写入数据位置变量时,剩余长度=w.pheader.write-w.pheader.read。
200.其中,w.pheader指向当前写入的环形缓冲区。
201.步骤303,将负载信息(用load表示)存储至长度为预设长度的负载信息队列中,如负载信息队列已满则先出队再存储。
202.其中,存储的负载信息load=(当前待读取数据长度 待写入数据长度)/w.pheader.size;其中,w.pheader.size表示当前环形缓冲区(即第一环形缓冲区)的总长度。
203.步骤304,根据待写入数据的长度与当前写入的环形缓冲区(即写环形缓冲区,例如第一环形缓冲区)的剩余长度,判断待写入数据是否能够完全写入。是,则执行步骤313;否,则执行步骤305。
204.步骤305,若待写入数据不能够完全写入当前写环形缓冲区,则根据负载情况计算需要生成的环形缓冲区(例如第二环形缓冲区)的大小。
205.步骤306,根据负载信息队列中存储的m组数据(即负载信息),采用第一公式计算当前平均负载值,第一公式为:l=∑load/m;其中,l表示平均负载值,load表示负载信息,m表示负载信息的个数。
206.步骤307,采用第二公式计算动态申请环形缓冲区(即第二环形缓冲区)的大小,第二公式为:nsize=w.pheader.size*(p l) data;其中,nsize表示第二环形缓冲区的总长度,w.pheader.size表示第一环形缓冲区的总长度,p表示常数,l表示平均负载值,data表示当前待写入数据的长度。
207.步骤308,动态申请环形缓冲区,将原环形缓冲区的尾指针指向新申请的环形缓冲区。
208.步骤309,重启低负载状态检测定时器。
209.需要说明的是,该步骤中,可以通过设置定时器,来进行环形缓冲区的低负载状态检测,这样,即可以实现周期性检测环形缓冲区的低负载状态。例如,周期性获取环形缓冲区的第一负载值,且获取到的第一负载值小于预设负载值时,确定该环形缓冲区处于低负载状态。若确定该环形缓冲区处于低负载状态,则说明当前环形缓冲区较大,空间存在浪费,可以重新申请一个较小的环形缓冲区来进行数据的读写操作。
210.步骤310,将待写入数据写入至原环形缓冲区(即第一环形缓冲区)中,直至原环形缓冲区写满。
211.步骤311,更新w.pheader,即当前写入环形缓冲区更改为新申请的环形缓冲区(即第二环形缓冲区)。
212.步骤312,将剩余待写入数据继续写入新的环形缓冲区(即更新后的w.pheader)中。
213.步骤313,若待写入数据能完全写入当前写环形缓冲区,直接将数据存入环形缓冲区中。
214.步骤314,当本次数据存储完成后,更新写入数据位置变量(即w.pheader.write)。
215.如图4所示,为环形缓冲区数据处理(读取)流程示意图,具体的:
216.步骤401,开始读取环形缓冲区(例如第一环形缓冲区)中的数据;
217.步骤402,读取数据后更新当前环形缓冲区的读取数据位置变量(即r.pheader.read);
218.步骤403,判断当前读取的环形缓冲区(即r.pheader)中的数据是否全部读取完;是,则执行步骤404;是,则执行步骤401;
219.步骤404,若未全部读取完则继续等待下一次的数据读取;若已全部读取完则判断当前缓冲区的尾指针是否为null;是,则执行步骤405;否,则执行步骤406;
220.步骤405,若当前环形缓冲区尾指针为null,则说明环形缓冲区中已无数据可以读取,等待数据写入;
221.步骤406,若当前环形缓冲区尾指针不为null,则说明缓冲数据未全部读取完成,需要跳转至下一个环形缓冲区进行数据读取,暂存当前环形缓冲区的尾指针所指向的环形缓冲区(例如第二环形缓冲区)为待读取环形缓冲区;
222.步骤407,将环形缓冲区空间释放(即释放数据读取完毕的环形缓冲区,例如第一环形缓冲区);
223.步骤408,更新r.pheader,即将当前读取的环形缓冲区设置为暂存的环形缓冲区尾指针指向环形缓冲区,然后等待下一次数据读取。
224.如图5所示,为环形缓冲区的低负载检测与动态调整流程示意图。其中,当检测到环形缓冲区处于低负载状态时,可以动态申请较小的环形缓冲区空间,具体的:
225.步骤501,当定时器timeout触发后,开始低负载检测。
226.需要说明的是,该步骤中,可以通过设置定时器,来进行环形缓冲区的低负载状态检测,这样,即可以实现周期性检测环形缓冲区的低负载状态。
227.步骤502,判断当前环形缓冲区的大小(即w.pheader.size)是否等于初始静态环形缓冲区长度(即initsize);是,则执行步骤503;否,则执行步骤504。
228.步骤503,若w.pheader.size=initsize成立,则说明不需要优化环形缓冲区空间。
229.该步骤中,可以根据具体情况关闭定时器。
230.步骤504,即w.pheader.size=initsize不成立,则获取负载信息,即根据负载信息队列中存储的m组数据(即负载信息),计算当前平均负载值l=∑load/m;其中,l表示平均负载值,load表示负载信息,m表示负载信息的个数。
231.步骤505,根据当前平均负载值,判断当前环形缓冲区是否处于低负载状态。是,则执行步骤506;否,则执行步骤511。
232.例如,周期性获取环形缓冲区的第一负载值,且获取到的第一负载值小于预设负载值(例如预设负载值为0.25,该值可以根据具体情况进行设定)时,确定该环形缓冲区处于低负载状态。
233.步骤506,若当前处于低负载状态,则根据负载信息,计算新申请环形缓冲区大小。
234.该步骤中,若确定该环形缓冲区处于低负载状态,则说明当前环形缓冲区较大,空间存在浪费,可以重新申请一个较小的环形缓冲区来进行数据的读写操作。其中,新申请的环形缓冲区的大小(即总长度)可以根据负载信息计算获得。
235.步骤507,计算新环形缓冲区(即第二环形缓冲区)的大小的公式可以为:n=w.pheader.size*l*2.5;其中,n表示第二环形缓冲区的总长度,w.pheader.size表示第一环形缓冲区的总长度,l表示平均负载值。
236.步骤508,该步骤中,需要指出,如果步骤507中计算出的新环形缓冲区的大小(即第一总长度)小于初始静态环形缓冲区的大小(即初始静态缓冲区长度),则申请的环形缓冲区大小取初始静态环形缓冲区大小,即nsize=max(n,initsize),也就是说,新申请的环形缓冲区的长度不能小于初始静态缓冲区长度。
237.步骤509,动态申请环形缓冲区,并将原环形缓冲区的尾指针指向申请的环形缓冲区。
238.步骤510,更新w.pheader,即设置当前写入环形缓冲区为新申请的环形缓冲区。
239.步骤511,若步骤505中判断出当前环形缓冲区不处于低负载状态,或者完成步骤510(即更新当前写入环形缓冲区)之后,可以重启计时器。
240.如图6所示,为本发明一可选实施例的环形缓冲区的数据处理装置示意图,该数据处理装置可以实现上述数据处理方法,其中,该数据处理装置可以包括:数据写入模块,用于控制将待写入数据写入至环形缓冲区;数据读取模块,用于控制读取环形缓冲区中的数据;缓冲区计算模块,用于计算生成环形缓冲区的大小;环形缓冲区管理模块,用于管理环形缓冲区的申请与释放;低负载状态检测模块,用于检测整体环形缓冲区的负载状态;负载信息管理模块,用于将环形缓冲区的负载信息存储至负载信息队列中并进行管理。
241.该实施例的数据处理方法,在当前环形缓冲区满足预设条件时,可以根据当前缓冲区的负载情况申请新的环形缓冲区,从而满足环形缓冲区的数据处理需求,能够适配当前数据写入和读取速率,提高了资源利用率,提升了设备的处理效率。
242.如图7所示,本发明实施例的一种网络设备700,包括处理器710和收发机720,其中,所述处理器用于:
243.在第一环形缓冲区满足预设条件的情况下,根据所述第一环形缓冲区的第一负载
值,申请第二环形缓冲区,并通过链表形式链接所述第一环形缓冲区和所述第二环形缓冲区;
244.将待写入数据写入所述第一环形缓冲区和/或所述第二环形缓冲区;
245.其中,所述第一负载值与所述第一环形缓冲区在不同时间对应的负载信息相关,所述负载信息与所述第一环形缓冲区的总长度相关。
246.该实施例中,动态请求的环形缓冲区(即第二环形缓冲区)的结构大小不是固定的,而是根据当前环形缓冲区的负载情况计算的,这样,基于缓冲区负载情况动态申请的环形缓冲区能够适配当前的数据速率(即数据读取或写入速率),可以避免由于频繁申请缓存空间或者申请的环形缓冲区空间过大而造成的资源利用率低的问题。
247.可选地,所述预设条件包括以下至少一项:
248.检测到待写入数据,且所述第一环形缓冲区的剩余长度小于所述待写入数据的长度;
249.周期性获取所述第一环形缓冲区的第一负载值,且获取到的所述第一负载值小于预设负载值。
250.可选地,所述处理器710在获取所述第一环形缓冲区的第一负载值时,具体用于:
251.获取负载信息队列中的负载信息;其中,所述负载信息队列中存储有m组所述第一环形缓冲区对应的负载信息;每组所述负载信息对应的时间不同;
252.获取m组所述负载信息的平均值,得到所述第一负载值。
253.可选地,所述处理器710在所述获取负载信息队列中的负载信息之前,还用于:
254.建立所述负载信息队列;
255.根据当前待读取数据的长度、待写入数据的长度和所述第一环形缓冲区的总长度,得到所述负载信息;
256.将所述负载信息存储至所述负载信息队列中。
257.可选地,在检测到待写入数据,且所述第一环形缓冲区的剩余长度小于所述待写入数据的长度的情况下,所述处理器710在根据所述第一环形缓冲区的第一负载值,申请第二环形缓冲区时,具体用于:
258.根据所述第一负载值,确定第二环形缓冲区的第一总长度;
259.申请具有所述第一总长度的第二环形缓冲区。
260.可选地,在周期性获取所述第一环形缓冲区的第一负载值,且获取到的所述第一负载值小于预设负载值的情况下,所述处理器710在根据所述第一环形缓冲区的第一负载值,申请第二环形缓冲区时,具体用于:
261.根据所述第一负载值,确定第二环形缓冲区的第一总长度;
262.根据所述第一总长度与初始静态缓冲区长度的大小关系,申请第二环形缓冲区。
263.可选地,所述处理器710在根据所述第一总长度与初始静态缓冲区长度的大小关系,申请第二环形缓冲区时,具体用于:
264.在所述第一总长度小于或等于所述初始静态缓冲区长度的情况下,申请具有所述初始静态缓冲区长度的第二环形缓冲区;
265.在所述第一总长度大于所述初始静态缓冲区长度的情况下,申请具有所述第一总长度的第二环形缓冲区。
266.可选地,所述处理器710在通过链表形式链接所述第一环形缓冲区和所述第二环形缓冲区时,具体用于:
267.将所述第一环形缓冲区的尾指针指向所述第二环形缓冲区的头指针。
268.可选地,所述处理器710还用于:
269.在所述第一环形缓冲区中的数据读取完成的情况下,释放所述第一环形缓冲区;
270.读取所述第二环形缓冲区中的数据。
271.可选地,在检测到待写入数据,且所述第一环形缓冲区的剩余长度小于所述待写入数据的长度的情况下,所述处理器710在将待写入数据写入所述第一环形缓冲区和/或所述第二环形缓冲区时,具体用于:
272.将所述待写入数据写入所述第一环形缓冲区;
273.在写满所述第一环形缓冲区后,对所述第二环形缓冲区进行初始化;
274.将待写入数据中未写入所述第一环形缓冲区的剩余部分写入至所述第二环形缓冲区中。
275.可选地,在周期性获取所述第一环形缓冲区的第一负载值,且获取到的所述第一负载值小于预设负载值的情况下,所述处理器710在将待写入数据写入所述第一环形缓冲区和/或所述第二环形缓冲区时,具体用于:
276.对所述第二环形缓冲区进行初始化;
277.将待写入数据写入所述第二环形缓冲区。
278.可选地,所述处理器710在对所述第二环形缓冲区进行初始化时,具体用于:
279.对所述第二环形缓冲区的读取数据位置信息和/或写入数据位置信息进行初始化。
280.该实施例的网络设备,在当前环形缓冲区满足预设条件时,可以根据当前缓冲区的负载情况申请新的环形缓冲区,从而满足环形缓冲区的数据处理需求,能够适配当前数据写入和读取速率,提高了资源利用率,提升了设备的处理效率。
281.如图8所示,本发明实施例的一种数据处理装置,包括:
282.申请模块810,用于在第一环形缓冲区满足预设条件的情况下,根据所述第一环形缓冲区的第一负载值,申请第二环形缓冲区,并通过链表形式链接所述第一环形缓冲区和所述第二环形缓冲区;
283.写入模块820,用于将待写入数据写入所述第一环形缓冲区和/或所述第二环形缓冲区;
284.其中,所述第一负载值与所述第一环形缓冲区在不同时间对应的负载信息相关,所述负载信息与所述第一环形缓冲区的总长度相关。
285.该实施例中,动态请求的环形缓冲区(即第二环形缓冲区)的结构大小不是固定的,而是根据当前环形缓冲区的负载情况计算的,这样,基于缓冲区负载情况动态申请的环形缓冲区能够适配当前的数据速率(即数据读取或写入速率),可以避免由于频繁申请缓存空间或者申请的环形缓冲区空间过大而造成的资源利用率低的问题。
286.可选地,所述预设条件包括以下至少一项:
287.检测到待写入数据,且所述第一环形缓冲区的剩余长度小于所述待写入数据的长度;
288.周期性获取所述第一环形缓冲区的第一负载值,且获取到的所述第一负载值小于预设负载值。
289.可选地,所述申请模块810包括:
290.第一获取单元,用于获取负载信息队列中的负载信息;其中,所述负载信息队列中存储有m组所述第一环形缓冲区对应的负载信息;每组所述负载信息对应的时间不同;
291.第二获取单元,用于获取m组所述负载信息的平均值,得到所述第一负载值。
292.可选地,所述数据写入装置还包括:
293.队列建立模块,用于建立所述负载信息队列;
294.信息处理模块,用于根据当前待读取数据的长度、待写入数据的长度和所述第一环形缓冲区的总长度,得到所述负载信息;
295.信息存储模块,用于将所述负载信息存储至所述负载信息队列中。
296.可选地,所述申请模块810还包括:
297.第一确定单元,用于根据所述第一负载值,确定第二环形缓冲区的第一总长度;
298.第一申请单元,用于申请具有所述第一总长度的第二环形缓冲区。
299.可选地,所述申请模块810还包括:
300.第二确定单元,用于根据所述第一负载值,确定第二环形缓冲区的第一总长度;
301.第二申请单元,用于根据所述第一总长度与初始静态缓冲区长度的大小关系,申请第二环形缓冲区。
302.可选地,所述第二申请单元包括:
303.第一申请子单元,用于在所述第一总长度小于或等于所述初始静态缓冲区长度的情况下,申请具有所述初始静态缓冲区长度的第二环形缓冲区;
304.第二申请子单元,用于在所述第一总长度大于所述初始静态缓冲区长度的情况下,申请具有所述第一总长度的第二环形缓冲区。
305.可选地,所述申请模块810还包括:
306.第一处理单元,用于将所述第一环形缓冲区的尾指针指向所述第二环形缓冲区的头指针。
307.可选地,所述数据处理装置还包括:
308.释放模块,用于在所述第一环形缓冲区中的数据读取完成的情况下,释放所述第一环形缓冲区;
309.读取模块,用于读取所述第二环形缓冲区中的数据。
310.可选地,所述写入模块包括:
311.第一写入单元,用于将所述待写入数据写入所述第一环形缓冲区;
312.第一初始化单元,用于在写满所述第一环形缓冲区后,对所述第二环形缓冲区进行初始化;
313.第二写入单元,用于将待写入数据中未写入所述第一环形缓冲区的剩余部分写入至所述第二环形缓冲区中。
314.可选地,所述写入模块还包括:
315.第二初始化单元,用于对所述第二环形缓冲区进行初始化;
316.第三写入单元,用于将待写入数据写入所述第二环形缓冲区。
317.可选地,所述第二初始化单元包括:
318.初始化子单元,用于对所述第二环形缓冲区的读取数据位置信息和/或写入数据位置信息进行初始化。
319.该实施例的数据处理装置,在当前环形缓冲区满足预设条件时,可以根据当前缓冲区的负载情况申请新的环形缓冲区,从而满足环形缓冲区的数据处理需求,能够适配当前数据写入和读取速率,提高了资源利用率,提升了设备的处理效率。
320.本发明另一实施例的网络设备,如图9所示,包括收发器910、处理器900、存储器920及存储在所述存储器920上并可在所述处理器900上运行的程序或指令;所述处理器900执行所述程序或指令时实现上述数据处理方法。
321.所述收发器910,用于在处理器900的控制下接收和发送数据。
322.其中,在图9中,总线架构可以包括任意数量的互联的总线和桥,具体由处理器900代表的一个或多个处理器和存储器920代表的存储器的各种电路链接在一起。总线架构还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路链接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口提供接口。收发器910可以是多个元件,即包括发送机和接收机,提供用于在传输介质上与各种其他装置通信的单元。处理器900负责管理总线架构和通常的处理,存储器920可以存储处理器900在执行操作时所使用的数据。
323.本发明实施例的一种可读存储介质,其上存储有程序或指令,所述程序或指令被处理器执行时实现如上所述的数据处理方法中的步骤,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(read-only memory,简称rom)、随机存取存储器(random access memory,简称ram)、磁碟或者光盘等。
324.进一步需要说明的是,此说明书中所描述的终端包括但不限于智能手机、平板电脑等,且所描述的许多功能部件都被称为模块,以便更加特别地强调其实现方式的独立性。
325.本发明实施例中,模块可以用软件实现,以便由各种类型的处理器执行。举例来说,一个标识的可执行代码模块可以包括计算机指令的一个或多个物理或者逻辑块,举例来说,其可以被构建为对象、过程或函数。尽管如此,所标识模块的可执行代码无需物理地位于一起,而是可以包括存储在不同位里上的不同的指令,当这些指令逻辑上结合在一起时,其构成模块并且实现该模块的规定目的。
326.实际上,可执行代码模块可以是单条指令或者是许多条指令,并且甚至可以分布在多个不同的代码段上,分布在不同程序当中,以及跨越多个存储器设备分布。同样地,操作数据可以在模块内被识别,并且可以依照任何适当的形式实现并且被组织在任何适当类型的数据结构内。所述操作数据可以作为单个数据集被收集,或者可以分布在不同位置上(包括在不同存储设备上),并且至少部分地可以仅作为电子信号存在于系统或网络上。
327.在模块可以利用软件实现时,考虑到现有硬件工艺的水平,所以可以以软件实现的模块,在不考虑成本的情况下,本领域技术人员都可以搭建对应的硬件电路来实现对应的功能,所述硬件电路包括常规的超大规模集成(vlsi)电路或者门阵列以及诸如逻辑芯片、晶体管之类的现有半导体或者是其它分立的元件。模块还可以用可编程硬件设备,诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备等实现。
328.上述范例性实施例是参考该些附图来描述的,许多不同的形式和实施例是可行而
不偏离本发明精神及教示,因此,本发明不应被建构成为在此所提出范例性实施例的限制。更确切地说,这些范例性实施例被提供以使得本发明会是完善又完整,且会将本发明范围传达给那些熟知此项技术的人士。在该些图式中,组件尺寸及相对尺寸也许基于清晰起见而被夸大。在此所使用的术语只是基于描述特定范例性实施例目的,并无意成为限制用。如在此所使用地,除非该内文清楚地另有所指,否则该单数形式“一”、“一个”和“该”是意欲将该些多个形式也纳入。会进一步了解到该些术语“包含”及/或“包括”在使用于本说明书时,表示所述特征、整数、步骤、操作、构件及/或组件的存在,但不排除一或更多其它特征、整数、步骤、操作、构件、组件及/或其族群的存在或增加。除非另有所示,陈述时,一值范围包含该范围的上下限及其间的任何子范围。
329.以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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

相关文献