CN110618883B - 一种用于共享内存链表的方法、装置、设备及存储介质 - Google Patents

一种用于共享内存链表的方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN110618883B
CN110618883B CN201910920795.0A CN201910920795A CN110618883B CN 110618883 B CN110618883 B CN 110618883B CN 201910920795 A CN201910920795 A CN 201910920795A CN 110618883 B CN110618883 B CN 110618883B
Authority
CN
China
Prior art keywords
shared memory
linked list
data
address
address offset
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910920795.0A
Other languages
English (en)
Other versions
CN110618883A (zh
Inventor
魏阳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Maipu Communication Technology Co Ltd
Original Assignee
Maipu Communication Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Maipu Communication Technology Co Ltd filed Critical Maipu Communication Technology Co Ltd
Priority to CN201910920795.0A priority Critical patent/CN110618883B/zh
Publication of CN110618883A publication Critical patent/CN110618883A/zh
Application granted granted Critical
Publication of CN110618883B publication Critical patent/CN110618883B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供一种用于共享内存链表的方法、装置、设备及存储介质。该方法包括:第一进程创建共享内存,所述共享内存包括共享内存管理块和共享内存数据块,所述共享内存的首地址作为所述共享内存管理块的起始地址;所述第一进程基于预定义的地址偏移链表的数据结构配置用户数据链表的链表头的数据结构,所述地址偏移链表的数据结构包括指向下一节点的地址偏移参数,所述链表头的数据结构包括指向下一节点的地址偏移参数;所述第一进程将所述链表头的数据结构映射到所述共享内存管理块。本申请能够提高多进程间数据访问的实时性和可靠性。

Description

一种用于共享内存链表的方法、装置、设备及存储介质
技术领域
本申请涉及多进程间数据共享技术领域,具体而言,涉及一种用于共享内存链表的方法、装置、设备及存储介质。
背景技术
软件***中,共享内存是效率最快的进程间通信形式,是针对其他通信机制效率低而设计的。然而目前大多数共享内存实现都是针对连续内存进行共享和使用,而对于共享内存链表的实现装置和应用都非常缺乏,使得进程间访问同一数据链的便利性和通信效率得不到充分的发挥和利用。
发明内容
本申请实施例的目的在于提供一种用于共享内存链表的方法、装置、设备及存储介质,用以提高多进程间数据访问的实时性和可靠性。
第一方面,本申请实施例提供的一种用于共享内存链表的方法,所述方法包括:第一进程创建共享内存,所述共享内存包括共享内存管理块和共享内存数据块,所述共享内存的首地址作为所述共享内存管理块的起始地址;所述第一进程基于预定义的地址偏移链表的数据结构配置用户数据链表的链表头的数据结构,所述地址偏移链表的数据结构包括指向下一节点的地址偏移参数,所述链表头的数据结构包括指向下一节点的地址偏移参数;所述第一进程将所述链表头的数据结构映射到所述共享内存管理块,以便于第二进程将所述第一进程的所述共享内存映射到自身进程内,以使所述第二进程从自身的共享内存中找到所述共享内存管理块中的所述链表头;并通过所述链表头中指向下一节点的地址偏移参数与所述第二进程的共享内存中所映射过来的所述第一进程的共享内存在自身中的首地址访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据。
在上述实现过程中,通过在第一进程创建共享内存,所述第一进程基于预定义的地址偏移链表的数据结构配置用户数据链表的链表头的数据结构,所述地址偏移链表的数据结构包括指向下一节点的地址偏移参数,所述链表头的数据结构包括指向下一节点的地址偏移参数;所述第一进程将所述链表头的数据结构映射到所述共享内存管理块,以便于第二进程将第一进程的共享内存映射到自身后,能够从自身的共享内存中找到所述共享内存管理块中的所述链表头;并通过所述链表头中指向下一节点的地址偏移参数与所述第二进程的共享内存中所映射过来的所述第一进程的共享内存在自身中的首地址,访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据,进而能够有效提高多进程间数据访问的实时性和可靠性,以便于提升***性能,以及为研发的便捷上带来更多的价值。
结合第一方面,本申请实施例提供了第一方面的第一种可能的实施方式,所述方法还包括:所述第一进程将共享内存数据块划分为多个大小不同的数据块,并将大小相同的所述数据块用指针链表方式组织起来,生成多个大小不同的内存链表,每个所述数据块包括起始地址与结束地址;所述第一进程根据用户数据的大小从多个大小不同的所述内存链表中申请对应大小的数据块;所述第一进程根据所申请到的数据块的起始地址与所述共享内存的首地址确定每个数据块相对所述共享内存的首地址的地址偏移量;所述第一进程将所述用户数据上链到所述链表头,生成用户数据链,其中,所述用户数据链上的每个节点中指向下一节点的地址偏移参数均按照所述地址偏移量进行设置。
在上述实现过程中,第一进程通过基于地址偏移的方式创建用户数据链表,以使在将该用户数据共享出去时,第二进程可以基于地址偏移的方式准确访问第一进程的数据,以实现进程间的共享内存链表的访问。能够有效提高整个***通信效率、提升***性能,以及为研发的便捷上带来更多的价值。
第二方面,本申请实施例提供的一种用于共享内存链表的方法,所述方法包括:第二进程将第一进程的共享内存映射到自身的共享内存中;所述第二进程从自身的共享内存中找到所述第一进程中的用户数据链表的链表头;所述第二进程根据所述链表头中指向下一节点的地址偏移参数与自身的共享内存中所映射过来的所述第一进程的共享内存在自身中的首地址访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据。
在上述实现过程中,第二进程通过将第一进程的共享内存映射到自身的共享内存中;以便于所述第二进程能够从自身的共享内存中找到所述第一进程中的用户数据链表的链表头;进而可以使得所述第二进程能够根据所述链表头中指向下一节点的地址偏移参数与自身的共享内存中所映射过来的所述第一进程的共享内存在自身中的首地址来快速访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据,从而实现多进程间的共享内存链表的实现与访问,进而能够有效提高多进程间的数据访问的实时性和可靠性,以便于提升***性能,以及为研发的便捷上带来更多的价值。
结合第二方面,本申请实施例提供了第二方面的第一种可能的实施方式,所述第二进程从自身的共享内存中找到所述第一进程中的用户数据链表的链表头,包括:所述第二进程从自身的共享内存中的所述第一进程映射过来的共享内存管理块中找到所述第一进程中的用户数据链表的链表头。
第三方面,本申请实施例提供的一种用于共享内存链表的装置,所述装置包括:创建模块,用于通过第一进程创建共享内存,所述共享内存包括共享内存管理块和共享内存数据块,所述共享内存的首地址作为所述共享内存管理块的起始地址;配置模块,用于通过所述第一进程基于预定义的地址偏移链表的数据结构配置用户数据链表的链表头的数据结构,所述地址偏移链表的数据结构包括指向下一节点的地址偏移参数,所述链表头的数据结构包括指向下一节点的地址偏移参数;第一处理模块,用于通过所述第一进程将所述链表头的数据结构映射到所述共享内存管理块,以便于第二进程将所述第一进程的所述共享内存映射到自身进程内,以使所述第二进程从自身的共享内存中找到所述共享内存管理块中的所述链表头;并通过所述链表头中指向下一节点的地址偏移参数与所述第二进程的共享内存中所映射过来的所述第一进程的共享内存在自身中的首地址,访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据。
结合第三方面,本申请实施例提供了第三方面的第一种可能的实施方式,所述装置还包括:第二处理模块,用于通过所述第一进程将共享内存数据块划分为多个大小不同的数据块,并将大小相同的所述数据块用指针链表方式组织起来,生成多个大小不同的内存链表,每个所述数据块包括起始地址与结束地址;内存申请模块,用于通过所述第一进程根据用户数据的大小从多个大小不同的所述内存链表中申请对应大小的数据块;第三处理模块,用于通过所述第一进程根据所申请到的数据块的起始地址与所述共享内存的首地址确定每个数据块相对所述共享内存的首地址的地址偏移量;数据链生成模块,用于通过所述第一进程将所述用户数据上链到所述链表头,生成用户数据链,其中,所述用户数据链上的每个节点中指向下一节点的地址偏移参数均按照所述地址偏移量进行设置。
第四方面,本申请实施例提供的一种用于共享内存链表的装置,所述装置包括:映射模块,用于通过第二进程将第一进程的共享内存映射到自身的存储空间;查询模块,用于通过所述第二进程从自身的共享内存中找到所述第一进程中的用户数据链表的链表头;访问模块,用于通过所述第二进程根据所述链表头中指向下一节点的地址偏移参数与自身的共享内存中所映射过来的所述第一进程的共享内存在自身中的首地址访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据。
结合第四方面,本申请实施例提供了第四方面的第一种可能的实施方式,所述查询模块,还用于:所述第二进程从自身的共享内存中的所述第一进程映射过来的共享内存管理块中找到所述第一进程中的用户数据链表的链表头。
第五方面,本申请实施例提供的一种电子设备,包括:存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面任一项所述的用于共享内存链表的步骤;或者,所述处理器执行所述计算机程序时实现如第二方面所述的用于共享内存链表的步骤。
第六方面,本申请实施例提供的一种存储介质,所述存储介质用于存储指令,当所述指令在计算机上运行时,使得所述计算机执行如第一方面任一项所述的用于共享内存链表的步骤;或者,当所述指令在计算机上运行时,使得所述计算机执行如第二方面所述的用于共享内存链表的步骤。
第七方面,本申请实施例提供的一种计算机程序产品,所述计算机程序产品在计算机上运行时,使得所述计算机执行如第一方面任一项所述的用于共享内存链表的步骤;或者,使得所述计算机执行如第二方面所述的用于共享内存链表的步骤。
本公开的其他特征和优点将在随后的说明书中阐述,或者,部分特征和优点可以从说明书推知或毫无疑义地确定,或者通过实施本公开的上述技术即可得知。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种用于共享内存链表的方法的流程图;
图2为本申请实施例提供的一种多进程之间访问的示意图;
图3为本申请实施例提供的一种用于共享内存链表的方法的流程图;
图4为本申请实施例提供的另一种用于共享内存链表的方法的流程图;
图5为本申请实施例提供的一种用于共享内存链表的装置的结构示意图;
图6为本申请实施例提供的一种用于共享内存链表的装置的结构示意图;
图7为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
请参阅图1,图1为本申请实施例提供的一种用于共享内存链表的方法的流程图,应理解,该方法可以通过下文中如图5所示的用于共享内存链表的装置来执行,该装置与下文中的图7所示的电子设备对应,该电子设备可以是能够执行该方法的各种设备,例如,该电子设备可以是计算机,也可以是服务器,本申请实施例并不限于此,具体包括如下步骤:
步骤S101,第一进程创建共享内存。
可选地,第一进程为需要共享数据的进程。即在实际使用中,第一进程是多进程中待共享数据的进程。例如,假设有4个进程,分别为进程1、进程2、进程3和进程4,如果进程2、进程3和进程4需要共享访问进程1中的用户数据时,此时,进程1即可以称为本申请中的第一进程。
应理解,上述仅为示例而非限定。
可选地,所述共享内存包括共享内存管理块和共享内存数据块,所述共享内存的首地址作为所述共享内存管理块的起始地址。
可选地,共享内存管理块的大小为固定大小,例如,可以是1024字节,也可以是2048字节,还可以是512字节,在此,不作具体限定。换句话说,共享内存管理块可以理解为一以共享内存首地址为起始地址的一个固定大小的存储空间。
作为一种实施方式,第一进程在申请到共享内存后,将共享内存中固定大小的块作为共享内存管理块,将剩余的内存作为共享内存数据块。
可选地,跳过共享内存管理块大小,并将剩余共享内存数据块切分为多个大小空间不同的块。
可选地,将切分后的相同大小的块用指针链表方式组织起来,生成多个大小不同的内存块链。其中,块信息上标该块的起始地址和块的大小。
可选地,可以使用双向链表方式将切分后的相同大小的块组织起来,生成多个大小不同的内存块链。
当然,在实际使用中,也可以采用单向链表的方式或者是循环链表的方式将切分后的相同大小的块组织起来,生成多个大小不同的内存块链。在此,不作具体限定。
举例来说,假设共享内存为4k(即4096字节),共享内存管理块占用1024字节,则共享内存管理块距离共享内存首地址的距离为0或1024字节,而共享内存数据块的起始地址为1025。
又例如,将共享内存数据块划分为6个块,如分别为4个512字节的块(块1、块2、块3和块4)和2个1024字节的块(块11和块22)。则形成的内存块链中的链1为:块1、块2、块3和块4形成的链。内存块链中的链2为由块11和块22形成的链。
应理解,上述仅为示例而非限定。
可选地,当从内存块链上申请空间(即链上的某一节点)存储数据时,被申请到的节点会从该内存块链上取下。当该节点释放数据时,该节点又可以重新回到该内存块链上。
继续以上述例子为例来说,假设申请到的节点为块2,则块2会从链1上被取下,而当块2存储的数据被释放后,块2又可以重新回到该链1上,一般来说,在重新回到链1上时,作为尾节点接入链1。
当然,块2还可以按照历史位置接入链1。在此,不作具体限定。
步骤S102,所述第一进程基于预定义的地址偏移链表的数据结构配置用户数据链表的链表头的数据结构。
可选地,所述地址偏移链表的数据结构包括指向下一节点的地址偏移参数。
可选地,用户数据链表用于管理用户的数据。例如,可以是学生数据,如学生编号、学生姓名、年龄等。
应理解,上述仅为示例而非限定。
作为一种实施方式,步骤S102,包括:第一进程通过预定义的地址偏移链表的数据结构配置用户数据链表的链表头的数据结构以及整个用户数据链表。
可选地,用户数据链表的链表头的数据结构包括指向下一节点的地址偏移参数。
可选地,用户数据链表的链表头的数据结构还包括用于描述用户数据链的描述信息和共享互斥信号量。
可选地,地址偏移链表的数据结构被预先配置在头文件内。在程序执行时,自动实现对地址偏移链表的数据结构的定义。
可选地,头文件内还配置有使用地址偏移链表进行查询、添加和删除的操作。例如,可以通过内联函数以及宏定义来实现基于地址偏移链表的查询、添加和删除的操作,以供多进程间直接在自身进程内使用地址偏移链表来进行查询、添加和删除的操作。
可选地,地址偏移链表可以是基于地址偏移的双向链表。
当然,在实际使用中,地址偏移链表也可以是基于地址偏移的单向链表或循环链表。在此,不作具体限定。
应理解,当地址偏移链表为双向链表或其他链表时,用户数据链表的链表头的数据结构也随地址偏移链表的数据结构发生改变。
例如,当地址偏移链表为双向链表时,其数据结构包括:指向下一节点的地址偏移参数以及指向下前一节点的地址偏移参数。而此时用户数据链表的链表头的数据结构也包括指向下一节点的地址偏移参数以及指向下前一节点的地址偏移参数。
作为一种实施方式,步骤S102,包括:第一进程按照预定义的地址偏移链表的数据结构中的指向下一节点的地址偏移参数配置用户数据链表的链表头的数据结构中的指向下一节点的地址偏移参数。
可选地,在用户数据链表中的每个节点上的指向下一节点的地址偏移参数的具体数值由下一节点与共享内存的首地址的差值来决定。
应理解,节点是指用户数据链表上的成员(也可以称为node)。
步骤S103,所述第一进程将所述链表头的数据结构映射到所述共享内存管理块。
可选地,共享内存管理块可以存储多个链表头。
可选地,多个链表头可以是不同用户数据的链表头。例如,当共享内存管理块有多个链表头时,在第二进程需要共享某一数据的时候,只需要找到对应的链表头,以通过该链表头对相应的用户数据链表进行访问。
可选地,第一进程将所述链表头的数据结构映射到所述共享内存管理块中,以便于第二进程将所述第一进程的所述共享内存映射到自身进程内,以使所述第二进程从自身的共享内存中找到所述共享内存管理块中的所述链表头;并通过所述链表头中指向下一节点的地址偏移参数与所述第二进程的共享内存中所映射过来的所述第一进程的共享内存在自身中的首地址访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据
本领域人员应理解,第二进程是指需要访问第一进程中的数据的进程。
可选地,第二进程可以是多个。在此,不作具体限定。
在上述实现过程中,第二进程通过将第一进程的共享内存映射过来,便于准确对第一进程中的数据进行访问。
在一可能的实施例中,所述方法还包括:所述第一进程将共享内存数据块划分为多个大小不同的数据块,并将大小相同的所述数据块用指针链表方式组织起来,生成多个大小不同的内存链表,每个所述数据块包括起始地址与结束地址;所述第一进程根据用户数据的大小从多个大小不同的所述内存链表中申请对应大小的数据块;所述第一进程根据所申请到的数据块的起始地址与所述共享内存的首地址确定每个数据块相对所述共享内存的首地址的地址偏移量;所述第一进程将所述用户数据上链到所述链表头,生成用户数据链,其中,所述用户数据链上的每个节点中指向下一节点的地址偏移参数均按照所述地址偏移量进行设置。
应理解,第一进程可以基于地址偏移链表定义的删除函数或查询函数实现对共享内存中的数据进行删除或查询,在此,不作具体限定。
可选地,第一进程通过基于地址偏移的方式创建用户数据链表,以使在将该用户数据共享出去时,第二进程可以基于地址偏移的方式准确访问第一进程的数据,以实现进程间的共享内存链表的访问。能够有效提高整个***通信效率、提升***性能,以及为研发的便捷上带来更多的价值。
作为一种应用场景,如图2所示,假设进程1作为需要共享数据出去的进程,即本申请中的第一进程,而进程2、进程3、进程4以及进程N则作为本申请中的第二进程。其中,N为大于或等于4的整数。由于进程1需要共享数据,故会在进程1内创建一个共享内存池(共享内存池与本申请中的共享内存为同一个),然后将共享内存池划分为共享内存管理块区域(即本申请中的共享内存管理块)和共享内存数据块区域(即本申请中的共享内存数据块);其中,将共享内存数据块划分为多个大小不同的数据块,并将大小相同的所述数据块用指针链表方式组织起来,生成多个大小不同的内存链表,每个所述数据块包括起始地址与结束地址。在创建完成后,使用基于地址偏移链表操作创建用户数据链,如用户数据块1、用户数据块2等。
需要说明的是,图2中共享内存数据块区域中的数据块的大小可以通过方框的大小来表示,方框越小表示该数据块较小,反之则大。
本申请实施例提供的一种用于共享内存链表的方法,通过在第一进程创建共享内存,所述第一进程基于预定义的地址偏移链表的数据结构配置用户数据链表的链表头的数据结构,所述地址偏移链表的数据结构包括指向下一节点的地址偏移参数,所述链表头的数据结构包括指向下一节点的地址偏移参数;所述第一进程将所述链表头的数据结构映射到所述共享内存管理块,以便于第二进程将第一进程的共享内存映射到自身后,能够从自身的共享内存中找到所述共享内存管理块中的所述链表头;并通过所述链表头中指向下一节点的地址偏移参数与所述第二进程的共享内存中所映射过来的所述第一进程的共享内存在自身中的首地址访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据,进而能够有效提高多进程间数据访问的实时性和可靠性,以便于提升***性能,以及为研发的便捷上带来更多的价值。
请参阅图3,图3为本申请实施例提供的一种用于共享内存链表的方法的流程图,应理解,该方法可以通过下文中如图6所示的用于共享内存链表的装置来执行,该装置与下文中的图7所示的电子设备对应,该电子设备可以是能够执行该方法的各种设备,例如,该电子设备可以是计算机,也可以是服务器,本申请实施例并不限于此,具体包括如下步骤:
步骤S201,第二进程将第一进程的共享内存映射到自身的共享内存中。
可选地,第二进程基于共享内存机制将第一进程的共享内存映射到自身的共享内存内。
应理解,每个进程都有一个独立的存储空间。
步骤S202,所述第二进程从自身的共享内存中找到所述第一进程中的用户数据链表的链表头。
作为一种实施方式,第二进程从自身的共享内存中先找到映射过来的第一进程的共享内存在自身中的首地址,从该首地址开始查询,找到用户数据链表的链表头。
举例来说,假设第一进程中的共享内存的首地址为1000(假设结束地址为2000),而第二进程的首地址为4000(假设结束地址为10000),第二进程在将第一进程的共享内存映射到自身的空间后,第二进程根据自身的存储空间,为被映射来的第一进程的共享内存分配一个连续的存储空间,例如,可以将从6000开始分配一个连续1000大小的空间给将要映射过来的共享内存中的数据使用,以将第一进程的共享内存映射到第二进程中,从6000到7000存储第一进程的共享内存,此时,第一进程中的共享内存的首地址即为6000。
作为另一种实施方式,步骤S202,包括:所述第二进程从自身的共享内存中的所述第一进程映射过来的共享内存管理块中找到所述第一进程中的用户数据链表的链表头。
步骤S203,所述第二进程根据所述链表头中指向下一节点的地址偏移参数与自身的共享内存中所映射过来的所述第一进程的共享内存在自身中的首地址,访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据。
作为一种实施方式,第二进程通过链表头中指向下一节点的地址偏移参数加上首地址可以找到下一个节点的起始地址,从而对位于下一节点中的数据进行访问,在访问完下一个节点时,通过链表上的下一个节点中的指向下一节点的地址偏移参数加上首地址,再次访问下下一个节点的数据,从而依次对链表上的所有节点进行访问。
可选地,一般来说,在访问到第二进程需要访问的数据时,会结束访问,或者是在访问完整个链表都没有查询到需要访问的数据时,也会在访问完整个链表后,自动结束访问。在此,不作具体限定。
上文结合图3对本申请实施例中的用于共享内存链表的方法进行了详细描述,下面,作为示例而非限定,结合图4对本申请中的用于共享内存链表的方法进行详细的描述。如图4所示的方法包括:
步骤S301,第一进程地址偏移链表定义。
可选地,第一进程获取头文件中的地址偏移双向链表定义好的数据结构。
步骤S302,第一进程创建共享内存。
步骤S303,第一进程共享内存数据块划分和组织。
步骤S302与步骤S303的具体实施方式,可以参照上文中的描述,在此,不再赘述。
步骤S304,第一进程共享内存内存块申请和释放。
可选地,在第一进程内配置对共享内存中的内存块(或数据块)对应大小的申请函数,以及释放回收函数,以便于申请内存或释放内存。
步骤S305,第一进程用户数据链表头定义。
可选地,第一进程基于地址偏移双向链表对用户数据链表头进行定义,其具体实施方式,可以参照上文,在此,不再赘述。
步骤S306,第一进程链表头数据映射到共享内存管理块中。
可选地,步骤S306的具体实施方式,可以参照上文,在此,不再赘述。
步骤S307,第一进程共享互斥信号量创建。
可选地,在第一进程中的用户数据链表的链表头中创建共享互斥信号量,以避免多个进程同时访问第一进程中的数据。
步骤S308,第一进程基于地址偏移双向链表创建用户数据链表。
步骤S309,第二进程映射第一进程的共享内存。
步骤S310,第二进程获取保存共享内存管理块中的数据。
步骤S311,第二进程通过地址偏移双向链表操作访问查询第一进程的数据。
可选地,步骤S308至步骤S311的具体实施方式,请参照上文,在此,不再赘述。
需要说明的是,本申请中的方法步骤S301至S311的顺序并不限定其在具体实施过程中的顺序。
本申请实施例提供的一种用于共享内存链表的方法,第二进程通过将第一进程的共享内存映射到自身的共享内存中;以便于所述第二进程能够从自身的共享内存中找到所述第一进程中的用户数据链表的链表头;进而可以使得所述第二进程能够根据所述链表头中指向下一节点的地址偏移参数与自身的共享内存中所映射过来的所述第一进程的共享内存在自身中的首地址来快速访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据,从而实现多进程间的共享内存链表的实现与访问,进而能够有效提高多进程间的数据访问的实时性和可靠性,以便于提升***性能,以及为研发的便捷上带来更多的价值。
基于同一发明构思,如图5所示,本申请实施例中还提供了一种与图1所示的用于共享内存链表的方法一一对应的用于共享内存链表的装置,应理解,该装置400能够执行上述方法实施例涉及的各个步骤,该装置400具体的功能可以参见上文中的描述,为避免重复,此处适当省略详细描述。具体地,该装置400包括:
创建模块410,用于通过第一进程创建共享内存,所述共享内存包括共享内存管理块和共享内存数据块,所述共享内存的首地址作为所述共享内存管理块的起始地址。
配置模块420,用于通过所述第一进程基于预定义的地址偏移链表的数据结构配置用户数据链表的链表头的数据结构,所述地址偏移链表的数据结构包括指向下一节点的地址偏移参数,所述链表头的数据结构包括指向下一节点的地址偏移参数。
第一处理模块430,用于通过所述第一进程将所述链表头的数据结构映射到所述共享内存管理块,以便于第二进程将所述第一进程的所述共享内存映射到自身进程内,以使所述第二进程从自身的共享内存中找到所述共享内存管理块中的所述链表头;并通过所述链表头中指向下一节点的地址偏移参数与所述第二进程的共享内存中所映射过来的所述第一进程的共享内存在自身中的首地址访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据。
在一可能的实施例中,所述装置400包括:第二处理模块,用于通过所述第一进程将共享内存数据块划分为多个大小不同的数据块,并将大小相同的所述数据块用指针链表方式组织起来,生成多个大小不同的内存链表,每个所述数据块包括起始地址与结束地址;内存申请模块,用于通过所述第一进程根据用户数据的大小从多个大小不同的所述内存链表中申请对应大小的数据块;第三处理模块,用于通过所述第一进程根据所申请到的数据块的起始地址与所述共享内存的首地址确定每个数据块相对所述共享内存的首地址的地址偏移量;数据链生成模块,用于通过所述第一进程将所述用户数据上链到所述链表头,生成用户数据链,其中,所述用户数据链上的每个节点中指向下一节点的地址偏移参数均按照所述地址偏移量进行设置。
基于同一发明构思,如图6所示,本申请实施例中还提供了一种与图3所示的用于共享内存链表的方法一一对应的用于共享内存链表的装置,应理解,该装置500能够执行上述方法实施例涉及的各个步骤,该装置500具体的功能可以参见上文中的描述,为避免重复,此处适当省略详细描述。具体地,该装置500包括:
映射模块510,用于通过第二进程将第一进程的共享内存映射到自身的存储空间。
查询模块520,用于通过所述第二进程从自身的共享内存中找到所述第一进程中的用户数据链表的链表头。
访问模块530,用于通过所述第二进程根据所述链表头中指向下一节点的地址偏移参数与自身的共享内存中所映射过来的所述第一进程的共享内存在自身中的首地址,访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据。
可选地,所述查询模块,还用于:所述第二进程从自身的共享内存中的所述第一进程映射过来的共享内存管理块中找到所述第一进程中的用户数据链表的链表头。
基于同一发明构思,本申请还提供一种装置,图7为本申请实施例中的装置500的结构框图。电子设备600可以包括处理器610、通信接口620、存储器630和至少一个通信总线640。其中,通信总线640用于实现这些组件直接的连接通信。其中,本申请实施例中设备的通信接口620用于与其他节点设备进行信令或数据的通信。处理器610可以是一种集成电路芯片,具有信号的处理能力。
存储器630中存储有计算机可读取指令,当所述计算机可读取指令由所述处理器610执行时,电子设备600可以执行上述图1或图3方法实施例涉及的各个步骤。
可选地,电子设备600还可以包括存储控制器。
所述存储器630、存储控制器、处理器610各元件相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通信总线540实现电性连接。所述处理器610用于执行存储器630中存储的可执行模块,例如装置400包括的软件功能模块或计算机程序。并且,装置400用于执行下述方法:第一进程创建共享内存,所述共享内存包括共享内存管理块和共享内存数据块,所述共享内存的首地址作为所述共享内存管理块的起始地址;所述第一进程基于预定义的地址偏移链表的数据结构配置用户数据链表的链表头的数据结构,所述地址偏移链表的数据结构包括指向下一节点的地址偏移参数,所述链表头的数据结构包括指向下一节点的地址偏移参数;所述第一进程将所述链表头的数据结构映射到所述共享内存管理块,以便于第二进程将所述第一进程的所述共享内存映射到自身进程内,以使所述第二进程从自身的共享内存中找到所述共享内存管理块中的所述链表头;并通过所述链表头中指向下一节点的地址偏移参数与所述第二进程的共享内存中所映射过来的所述第一进程的共享内存在自身中的首地址访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据。又例如,装置500包括的软件功能模块或计算机程序。并且,装置500用于执行下述方法:第二进程将第一进程的共享内存映射到自身的存储空间;所述第二进程从自身的共享内存中找到所述第一进程中的用户数据链表的链表头;所述第二进程根据所述链表头中指向下一节点的地址偏移参数与自身的共享内存中所映射过来的所述第一进程的共享内存在自身中的首地址访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据。
可以理解,图7所示的结构仅为示意,所述电子设备600还可包括比图7中所示更多或者更少的组件,或者具有与图7所示不同的配置。图7中所示的各组件可以采用硬件、软件或其组合实现。
本申请实施例还提供一种存储介质,所述存储介质上存储有指令,当所述指令在计算机上运行时,使得所述计算机执行时实现方法实施例所述的方法,为避免重复,此处不再赘述。
本申请还提供一种计算机程序产品,所述计算机程序产品在计算机上运行时,使得计算机执行方法实施例所述的方法。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (10)

1.一种用于共享内存链表的方法,其特征在于,所述方法包括:
第一进程创建共享内存池,所述共享内存池包括共享内存管理块和共享内存数据块,所述共享内存池的首地址作为所述共享内存管理块的起始地址;
所述第一进程基于预定义的地址偏移链表的数据结构配置用户数据链表的链表头的数据结构,所述地址偏移链表的数据结构包括指向下一节点的地址偏移参数,所述链表头的数据结构包括指向下一节点的地址偏移参数;
所述第一进程将所述链表头的数据结构映射到所述共享内存管理块,以便于第二进程将所述第一进程的所述共享内存池映射到自身进程内,以使所述第二进程从自身的共享内存池中找到所述共享内存管理块中的所述链表头;并通过所述链表头中指向下一节点的地址偏移参数与所述第二进程的共享内存池中所映射过来的所述第一进程的共享内存池在自身中的首地址,访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述第一进程将共享内存数据块划分为多个大小不同的数据块,并将大小相同的所述数据块用指针链表方式组织起来,生成多个大小不同的内存链表,每个所述数据块包括起始地址与结束地址;
所述第一进程根据用户数据的大小从多个大小不同的所述内存链表中申请对应大小的数据块;
所述第一进程根据所申请到的数据块的起始地址与所述共享内存池的首地址确定每个数据块相对所述共享内存池的首地址的地址偏移量;
所述第一进程将所述用户数据上链到所述链表头,生成用户数据链,其中,所述用户数据链上的每个节点中指向下一节点的地址偏移参数均按照所述地址偏移量进行设置。
3.一种用于共享内存链表的方法,其特征在于,所述方法包括:
第二进程将第一进程的共享内存池映射到自身的共享内存池中;其中,所述第一进程的共享内存池由所述第一进程创建,所述第一进程的共享内存池包括共享内存管理块和共享内存数据块,所述第一进程的共享内存池的首地址作为所述共享内存管理块的起始地址;所述第一进程基于预定义的地址偏移链表的数据结构配置有用户数据链表的链表头的数据结构,所述地址偏移链表的数据结构包括指向下一节点的地址偏移参数,所述链表头的数据结构包括指向下一节点的地址偏移参数;
所述第二进程从自身的共享内存池中找到所述第一进程中的用户数据链表的链表头;
所述第二进程根据所述链表头中指向下一节点的地址偏移参数与自身的所述共享内存池中所映射过来的所述第一进程的共享内存池在自身中的首地址访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据。
4.根据权利要求3所述的方法,其特征在于,所述第二进程从自身的共享内存中找到所述第一进程中的用户数据链表的链表头,包括:
所述第二进程从自身的共享内存池中的所述第一进程映射过来的共享内存管理块中找到所述第一进程中的用户数据链表的链表头。
5.一种用于共享内存链表的装置,其特征在于,所述装置包括:
映射模块,用于通过第一进程创建共享内存池,所述共享内存池包括共享内存管理块和共享内存数据块,所述共享内存池的首地址作为所述共享内存管理块的起始地址;
配置模块,用于通过所述第一进程基于预定义的地址偏移链表的数据结构配置用户数据链表的链表头的数据结构,所述地址偏移链表的数据结构包括指向下一节点的地址偏移参数,所述链表头的数据结构包括指向下一节点的地址偏移参数;
第一处理模块,用于通过所述第一进程将所述链表头的数据结构映射到所述共享内存管理块,以便于第二进程将所述第一进程的所述共享内存池映射到自身进程内,以使所述第二进程从自身的共享内存池中找到所述共享内存管理块中的所述链表头;并通过所述链表头中指向下一节点的地址偏移参数与所述第二进程的共享内存池中所映射过来的所述第一进程的共享内存池在自身中的首地址访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据。
6.根据权利要求5所述的装置,其特征在于,所述装置还包括:
第二处理模块,用于通过所述第一进程将共享内存数据块划分为多个大小不同的数据块,并将大小相同的所述数据块用指针链表方式组织起来,生成多个大小不同的内存链表,每个所述数据块包括起始地址与结束地址;
内存申请模块,用于通过所述第一进程根据用户数据的大小从多个大小不同的所述内存链表中申请对应大小的数据块;
第三处理模块,用于通过所述第一进程根据所申请到的数据块的起始地址与所述共享内存池的首地址确定每个数据块相对所述共享内存池的首地址的地址偏移量;
数据链生成模块,用于通过所述第一进程将所述用户数据上链到所述链表头,生成用户数据链,其中,所述用户数据链上的每个节点中指向下一节点的地址偏移参数均按照所述地址偏移量进行设置。
7.一种用于共享内存链表的装置,其特征在于,所述装置包括:
映射模块,用于通过第二进程将第一进程的共享内存池映射到自身的共享内存池中;其中,所述第一进程的共享内存池由所述第一进程创建,所述第一进程的共享内存池包括共享内存管理块和共享内存数据块,所述第一进程的共享内存池的首地址作为所述共享内存管理块的起始地址;所述第一进程基于预定义的地址偏移链表的数据结构配置有用户数据链表的链表头的数据结构,所述地址偏移链表的数据结构包括指向下一节点的地址偏移参数,所述链表头的数据结构包括指向下一节点的地址偏移参数;
查询模块,用于通过所述第二进程从自身的共享内存池中找到所述第一进程中的用户数据链表的链表头;
访问模块,用于通过所述第二进程根据所述链表头中指向下一节点的地址偏移参数与自身的所述共享内存池中所映射过来的所述第一进程的共享内存池在自身中的首地址,访问所述第一进程中所述用户数据链表对应的共享内存链表中的数据。
8.根据权利要求7所述的装置,其特征在于,所述查询模块,还用于:
所述第二进程从自身的共享内存池中的所述第一进程映射过来的共享内存管理块中找到所述第一进程中的用户数据链表的链表头。
9.一种电子设备,其特征在于,包括:存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至2任一项所述的用于共享内存链表的方法;或者,所述处理器执行所述计算机程序时实现如权利要求3-4所述的用于共享内存链表的方法。
10.一种存储介质,其特征在于,所述存储介质用于存储指令,当所述指令在计算机上运行时,使得所述计算机执行如权利要求1至2任一项所述的用于共享内存链表的方法;或者,当所述指令在计算机上运行时,使得所述计算机执行如权利要求3-4所述的用于共享内存链表的方法。
CN201910920795.0A 2019-09-26 2019-09-26 一种用于共享内存链表的方法、装置、设备及存储介质 Active CN110618883B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910920795.0A CN110618883B (zh) 2019-09-26 2019-09-26 一种用于共享内存链表的方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910920795.0A CN110618883B (zh) 2019-09-26 2019-09-26 一种用于共享内存链表的方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN110618883A CN110618883A (zh) 2019-12-27
CN110618883B true CN110618883B (zh) 2022-09-13

Family

ID=68924648

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910920795.0A Active CN110618883B (zh) 2019-09-26 2019-09-26 一种用于共享内存链表的方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN110618883B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113760560A (zh) * 2020-06-05 2021-12-07 华为技术有限公司 一种进程间通信方法以及进程间通信装置
CN113342805B (zh) * 2021-04-21 2023-04-11 湖北微源卓越科技有限公司 多进程共享数据的***及方法
CN113453276B (zh) * 2021-05-18 2024-01-16 翱捷科技股份有限公司 一种提高lte终端上下行内存利用率的方法及装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6952722B1 (en) * 2002-01-22 2005-10-04 Cisco Technology, Inc. Method and system using peer mapping system call to map changes in shared memory to all users of the shared memory
CN1740978A (zh) * 2004-08-23 2006-03-01 华为技术有限公司 实现共享内存数据库的方法及内存数据库***
CN103197979A (zh) * 2012-01-04 2013-07-10 阿里巴巴集团控股有限公司 一种用于实现在进程间进行数据交互访问的方法及其装置
CN106681842A (zh) * 2017-01-18 2017-05-17 迈普通信技术股份有限公司 一种多进程***中共享内存的管理方法及装置
CN107102900A (zh) * 2016-02-22 2017-08-29 上海大唐移动通信设备有限公司 一种共享内存空间的管理方法
CN107391285A (zh) * 2017-08-23 2017-11-24 美的智慧家居科技有限公司 内存共享方法和***

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101676906B (zh) * 2008-09-18 2013-06-05 中兴通讯股份有限公司 一种利用位图对内存数据库空间进行管理的方法
CN102004675A (zh) * 2010-11-11 2011-04-06 福建星网锐捷网络有限公司 跨进程数据传输方法、装置及网络设备
CN103034544B (zh) * 2012-12-04 2015-08-05 杭州迪普科技有限公司 一种用户态与内核态共享内存的管理方法和装置
CN103902459B (zh) * 2012-12-25 2017-07-28 华为技术有限公司 确定共享虚拟内存页面管理模式的方法和相关设备
CN106155933B (zh) * 2016-07-06 2019-02-05 乾云众创(北京)信息科技研究院有限公司 一种基于KSM及Pass-through相结合的虚拟机内存共享方法
WO2019028682A1 (zh) * 2017-08-08 2019-02-14 深圳前海达闼云端智能科技有限公司 一种多***共享内存的管理方法及装置
CN110109763A (zh) * 2019-04-12 2019-08-09 厦门亿联网络技术股份有限公司 一种共享内存管理方法及装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6952722B1 (en) * 2002-01-22 2005-10-04 Cisco Technology, Inc. Method and system using peer mapping system call to map changes in shared memory to all users of the shared memory
CN1740978A (zh) * 2004-08-23 2006-03-01 华为技术有限公司 实现共享内存数据库的方法及内存数据库***
CN103197979A (zh) * 2012-01-04 2013-07-10 阿里巴巴集团控股有限公司 一种用于实现在进程间进行数据交互访问的方法及其装置
CN107102900A (zh) * 2016-02-22 2017-08-29 上海大唐移动通信设备有限公司 一种共享内存空间的管理方法
CN106681842A (zh) * 2017-01-18 2017-05-17 迈普通信技术股份有限公司 一种多进程***中共享内存的管理方法及装置
CN107391285A (zh) * 2017-08-23 2017-11-24 美的智慧家居科技有限公司 内存共享方法和***

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
multi process share memory map address;Xiao-hui Cheng等;《Proceedings of 2011 International Conference on Computer Science and Network Technology》;20120412;第111-114页 *
this is share memory impl multi process for rust;tickbh;《https://github.com/tickbh/ShareMemory》;20180423;第1-3页 *
基于内存映射文件的进程间数据传输;段继华等;《无线电工程》;20071105(第11期);第46-47、51页 *
面向同驻虚拟机的高效共享内存文件***;沙行勉等;《计算机学报》;20180515;第42卷(第04期);第800-819页 *

Also Published As

Publication number Publication date
CN110618883A (zh) 2019-12-27

Similar Documents

Publication Publication Date Title
CN110618883B (zh) 一种用于共享内存链表的方法、装置、设备及存储介质
KR101786871B1 (ko) 원격 페이지 폴트 처리 장치 및 그 방법
CN107273042B (zh) 重复删除dram***算法架构的存储器模块及方法
CN107066498B (zh) 键值kv存储方法和装置
US20150113230A1 (en) Directory storage method and query method, and node controller
CN108121813B (zh) 数据管理方法、装置、***、存储介质及电子设备
US11314689B2 (en) Method, apparatus, and computer program product for indexing a file
CN104424030B (zh) 多进程操作共享内存的方法和装置
CN105518631B (zh) 内存管理方法、装置和***、以及片上网络
CN107341054B (zh) 任务执行方法、装置及计算机可读存储介质
CN108762915B (zh) 一种在gpu内存中缓存rdf数据的方法
CN112256457A (zh) 一种基于共享内存的数据载入加速方法、装置、电子设备及存储介质
US8543722B2 (en) Message passing with queues and channels
CN115470156A (zh) 基于rdma的内存使用方法、***、电子设备和存储介质
CN107451070B (zh) 一种数据的处理方法和服务器
CN113312182B (zh) 一种云计算节点、文件处理方法及装置
CN109271193B (zh) 一种数据处理方法、装置、设备及存储介质
CN112650692A (zh) 堆内存分配方法、装置及存储介质
CN116662019B (zh) 请求的分配方法、装置、存储介质及电子装置
CN115114042A (zh) 存储数据访问方法、装置、电子设备和存储介质
CN114443598A (zh) 写数据方法、装置、计算机设备及存储介质
CN116155828B (zh) 一种多个虚拟队列的报文保序方法及其装置、存储介质、电子设备
CN112685417A (zh) 数据库操作方法、***、装置、服务器及存储介质
CN109582242B (zh) 级联存储阵列***的地址确定方法、装置、电子设备
CN114116008B (zh) 命令队列管理方法、装置、可读存储介质及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant