本公开涉及计算机,具体涉及一种数据报文存储方法、装置、设备及存储介质。
背景技术:
1、随着技术发展,对数据报文进行多线程转发已经成为主流。一种多线程转发数据报文的方案包括:计算机调用多个线程获取数据报文,各个线程获取到的数据报文均写入内存,在内存中存储到的数据报文达到预设的量之后,计算机将内存中的数据报文读出。
2、采用多线程写内存的处理场景中,对于写入效率(也即存储效率)的要求较高。内存的占用率是计算机处理性能重要表征之一。但,目前基于多线程的数据存储技术只能将存储效率或者内存占用率维持在较好的水平。
3、因此,本技术领域,亟需一种兼顾内存占用率和存储效率的技术。
技术实现思路
1、本公开提出一种数据报文存储方法、装置、设备及存储介质,按照待获取数据报文总长度的二倍配置存储区域,有利于降低内存的占用率。并且,将该存储区域分区为主内存块集合和扩展内存块集合,以及使主内存块集合中的各个主内存块可以与目标数量个线程一一对应,从而支持各个线程以并行的方式存储数据,保证存储效率。
2、本公开第一方面实施例提出了一种数据报文存储方法,所述方法包括:
3、调用目标数量个线程并行从所接收的信息中获取数据报文,所述目标数量大于或者等于2,所述目标数量个线程与主内存块集合包含的所述目标数量个主内存块一一对应;
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、获取模块,用于调用目标数量个线程并行从所接收的信息中获取数据报文,所述目标数量大于或者等于2,所述目标数量个线程与主内存块集合包含的所述目标数量个主内存块一一对应;
33、检测模块,用于针对所述目标数量个线程中的任一线程,在获取到数据报文之后,检测所述线程占用的至少一个内存块是否满足存储要求,所述至少一个内存块包括所述线程对应的主内存块;
34、所述获取模块,还用于若所述线程占用的至少一个内存块不满足所述存储要求,调用所述线程从扩展内存块集合中获取未占用的扩展内存块存储所述数据报文;
35、其中,所述主内存块集合与所述扩展内存块集合的存储空间总和为二倍的预设字节数,所述预设字节数是待获取的所有数据报文的总长度。
36、本公开第三方面的实施例提供了一种电子设备,该电子设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序以实现上述第一方面所述的方法。
37、本公开第四方面的实施例提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行实现上述第一方面所述的方法。
38、本公开实施例中提供的技术方案,至少具有如下技术效果或优点:
39、待获取的所有数据报文的总长度为预设字节数,本公开实施例中,在获取数据报文之前,可以根据预部署二倍的预设字节数的存储区域。也就是说,本公开实施例可以将目标数量个线程所占据的内存控制在数据报文总长的二倍,有利于降低内存的占用率,所述目标数量大于或者等于2。进一步的,本公开实施例,将该存储区域分区为主内存块集合和扩展内存块集合,主内存块集合中的各个主内存块可以与目标数量个线程一一对应,使得目标数量个线程可以并行从所接收的信息中获取数据报文,且在任一主内存块写满之后,相应的线程可以使用扩展内存块继续存储,即,目标数量个线程向任意内存块存储数据报文的过程,均可以并行执行,从而有利于保证存储效率。可见,本公开实施例的技术方案,能够兼顾多线程场景下的内存占用率和存储效率。
40、本公开附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变的明显,或通过本公开的实践了解到。