CN114490141A - 一种基于共享内存的高并发ipc数据交互方法 - Google Patents
一种基于共享内存的高并发ipc数据交互方法 Download PDFInfo
- Publication number
- CN114490141A CN114490141A CN202210390727.XA CN202210390727A CN114490141A CN 114490141 A CN114490141 A CN 114490141A CN 202210390727 A CN202210390727 A CN 202210390727A CN 114490141 A CN114490141 A CN 114490141A
- Authority
- CN
- China
- Prior art keywords
- entity
- shared memory
- message
- information
- subscription
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于共享内存的高并发IPC数据交互方法,针对信息系统的高并发IPC数据交互需求,能够突破现有IPC数据交互技术的高并发性能瓶颈,能够有效缓解流量冲击,支持点对点、订阅/发布两种方式的IPC数据交互,具有简便友好、高实时性、高性能的特点。基于共享内存实现了支持多进程多对多交互的消息队列,具备极佳的实时性。支持对多进程实体注册的全局统一管理,通过各进程独立缓存实体‑共享内存信息,并实现与全局管理实体‑共享内存信息的同步,能够减小高并发条件下的竞争开销,快速访问共享内存。通过共享内存快速扩容技术,能够缓解流量冲击,支持高吞吐量的IPC数据交互。
Description
技术领域
本发明涉及一种IPC数据交互方法,特别是一种基于共享内存的高并发IPC数据交互方法。
背景技术
随着信息技术不断发展和革新,计算机软件在产业升级、社会生活领域发挥越来越重要的作用,信息系统呈现出功能多样、形态复杂、规模庞大的发展趋势,信息系统中的各功能域软件密切交互、协同运作,共同支撑起系统庞大的功能需求。另一方面随着通信技术的发展,以及各种通信设备的普及,信息系统需要处理的数据呈爆发式增长,超大流量信息流处理及多软件交互产生了高并发IPC数据交互需求。
目前操作系统的IPC(Inter-Process Communication,进程间通信)数据交互的主要方式有:管道、消息队列、文件内存映射、共享内存、网络套接字。管道、消息队列不支持多进程共同写入,无法满足多进程多应用实体的数据交互。文件内存映射传输时延性能不够理想。基于网络套接字实现进程多应用实体的数据交互,产生了网络端口占用问题和网络资源开销。
共享内存是针对其他IPC通信机制运行效率低而设计的,是最快速的IPC通信方式,支持多个进程共同写入。但是目前基于共享内存的IPC消息队列,一般都只提供点对点通信,不提供订阅/发布交互能力,而且一般通过对共享内存资源信息的全局管理,来实现多进程共享内存的访问。在高并发数据交互条件下,访问全局共享内存资源信息,引发竞争开销加剧,传输性能不能满足高并发IPC数据交互需求,高吞吐量的数据交互还可能导致共享内存数据容量消耗完毕、无法继续写入的问题。目前尚未见到有解决上述高并发问题的共享内存数据交互技术。
发明内容
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种基于共享内存的高并发IPC数据交互方法。
为了解决上述技术问题,本发明公开了一种基于共享内存的高并发IPC数据交互方法,包括以下步骤:
步骤1,实体注册:实体是业务进程调用接口进行IPC通信的基本对象,通过全局唯一的共享内存,记录全局实体注册信息,即实体-共享内存映射信息;当业务进程注册实体时,查询全局实体注册信息,检查实体是否被抢占注册,若为新增实体,则创建实体共享内存,添加实体注册信息,更新并和其他进程同步实体-共享内存映射信息;
步骤2,通过全局唯一的共享内存,记录实体订阅消息类型;
步骤3,实体点对点发送消息,查询目的实体-共享内存映射信息,将数据写入目的共享内存,目的端接收线程将数据推送给目的实体;
步骤4,实体发布消息,查询全局消息订阅记录,通过步骤3将消息发给各订阅实体;
步骤5,实体接收消息时,若共享内存容量使用过半,则对共享内存进行快速扩容,扩容完成后,更新并和其他进程同步实体-共享内存映射信息;
步骤6,实体注销时,注销共享内存,删除实体注册信息,更新并和其他进程同步实体-共享内存映射信息。
本发明步骤1中,各实体分别创建独立读写的共享内存用于进行多对多通信,实体注册对各进程互斥,所述实体注册方法包括:
步骤1-1,查询全局实体注册信息,检查实体注册状态;
步骤1-2,若不存在该实体注册信息,则成功注册,创建共享内存,添加实体注册信息,并将新注册的实体-共享内存映射信息发布给其他进程,完成同步;
步骤1-3,若已存在该实体注册信息,实体所属进程已经退出运行,则成功注册,创建共享内存,更新实体注册信息,并将更新后的实体-共享内存映射信息发布给其他进程,完成同步;
步骤1-4,若已存在该实体注册信息,实体所属进程运行中,则注册失败,返回错误提示,即表示实体已被占用。
本发明步骤1中,实体-共享内存映射信息分布式存储及同步的方法包括:各进程独立存储实体-共享内存映射信息;进行IPC通信时,首先从本进程存储的实体-共享内存映射信息,查询共享内存ID,并访问目的共享内存,进行IPC通信;若查询不到,则转而通过全局实体注册信息查询,并将全局实体-共享内存映射信息与本进程同步;在实体注册注销时,将变更的实体-共享内存映射信息发布给其他进程,完成同步。
本发明步骤2中所述全局唯一的共享内存,分为消息类型检索区和动态存储区,其中消息类型检索区存储实体订阅的消息类型和订阅实体链表首地址;动态存储区存储订阅实体链表各元素。
本发明步骤2中所述全局唯一的共享内存中的消息类型检索区是一块静态分配的数组空间,其元素地址连续,在遍历检索消息类型时,进行高效检索;
本发明步骤2中所述全局唯一的共享内存中的动态存储区是一块自由分配释放的空间;和操作系统的堆内存管理方式相似,动态存储区采取内存管理技术,即使用游标法模拟实现内存的动态分配和释放,从而支撑订阅实体链表元素的添加和删除操作;
本发明步骤2中所述记录实体订阅消息类型方法包括:
实体进行订阅或发布请求时,首先访问消息类型检索区,检索该消息类型;存储消息类型时,按照数值大小升序排列存储;检索时通过二分法查找;若不存在该消息类型,则在消息类型检索区添加新的消息类型元素,创建实体订阅链表;若已存在该消息类型,则访问动态存储区,查询订阅实体链表信息;
查询订阅实体链表信息时,若为实体订阅请求,且无该实体订阅记录,则申请分配元素空间,在订阅实体链表中添加该实体;若为实体退订请求,其存在该实体订阅记录,则在订阅实体链表中删除该实体,释放元素空间;若为实体发布请求,则将链表全部订阅实体作为结果返回。
本发明步骤3中,点对点发送消息时,发端将消息写入目的共享内存,目的端即收端接收线程将数据推送给目的实体,具体方法包括:
步骤3-1,通过循环队列,在共享内存中记录消息内容;
步骤3-2,接收实体在成功注册并创建共享内存后,启动共享内存读取线程和消息接收处理线程,阻塞等待消息写入;
步骤3-3,发端从本进程缓存中查询目的实体共享内存信息,若查询失败,从全局实体-共享内存信息中拉取目的实体共享内存信息;
步骤3-4,发端将消息写入目的共享内存循环队列,队列信号量加1;
步骤3-5,收端共享内存读取线程,从共享内存中拉取数据,添加到接收处理消息队列,通过消息接收处理线程,负责消费接收处理消息队列的消息,执行目的实体的消息处理回调。
本发明步骤5中,实体接收消息时,若共享内存容量使用过半,则对共享内存进行快速扩容,方法包括:
步骤5-1,收端从共享内存读取消息时,检查共享内存容量,若使用过半,则对共享内存设置扩容状态标记;
步骤5-2,发端发送时,若检查到共享内存进入到扩容状态,则发送进入等待;
步骤5-3,收端在设置扩容状态标记后,创建两倍大小的新共享内存,将原共享内存队列缓存消息拷贝到新共享内存,更新实体注册信息,并将更新后的实体-共享内存映射信息发布给其他进程,完成同步,最后设置共享内存扩容完成标记;
步骤5-4,发端检查到共享内存扩容完成标记,并且更新完成新的共享内存信息后,退出等待,继续发送消息,写入新的共享内存。
本发明步骤6中,所述实体注销时,查询全局实体注册信息,检查实体注册状态,进行注销操作,具体方法包括:
步骤6-1,若实体已注册并且属于当前进程,则进行注销操作,否则注销失败;
步骤6-2,根据实体-共享内存映射信息,对共享内存进行注销操作;
步骤6-2,在全局实体-共享内存映射信息中删除该实体信息;
步骤6-3,在全局实体订阅信息中,删除该实体所有的订阅记录;
步骤6-4,发布实体注销信息到各进程进行同步。
有益效果:
(1) 基于共享内存技术,相比较管道、文件内存映射、网络套接字等IPC方式,速度更快,实时性更强;
(2) 各业务进程使用独立的共享内存实现多进程多对多数据交互,相比较使用共同单一的共享内存通信,具备更强的高并发读写性能;
(3) 支持订阅/发布数据交互,并通过订阅/发布方式实现了全局实体共享内存映射信息与各进程缓存实体共享内存映射信息的同步,有效减少了高并发条件下共同读取全局实体共享内存映射信息的竞争开销;
(4) 支持共享内存快速扩容,能够自适应调整共享内存容量,缓解流量冲击;
(5) 本发明以软件共享库方式实现,无服务无配置,更简便友好。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1为本发明总体设计示意图。
图2为订阅管理共享内存示意图。
图3为实体注册流程示意图。
图4为点对点数据交互流程示意图。
图5为共享内存快速扩容流程示意图。
图6为实体注销流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提出一种基于共享内存的高并发IPC数据交互方法,其总体设计示意图如图1所示,能够突破现有IPC数据交互技术的高并发性能瓶颈、有效缓解流量冲击,支持点对点、订阅/发布两种方式的IPC数据交互,具有简便友好、高实时性、高性能的特点。
本发明以软件共享库方式实现,其总体设计如图1所示。共享库定义了实体注册、注销、发送、订阅、退订、发布接口函数,以及接收回调函数,可供应用进程调用从而实现IPC通信。以下是相关定义:应用进程:加载共享库并通过调用接口实现IPC通信的应用程序。
实体:业务进程调用接口进行IPC通信的基本对象,可通过不同实体收发不同类型的业务数据。
接收回调:声明实体接收处理函数类型,定义了函数的输入参数及返回值类型。调用实体注册接口需要提供接收回调函数指针,共享库内部记录实体接收回调函数指针,当成功读取到共享内存数据时调用接收回调函数指针进行接收处理。
实体注册接口:应用进程调用该接口实现实体的初始化,包括创建共享内存、记录接收回调、开启共享内存读取线程等操作。
实体注销接口:应用进程调用该接口实现实体的注销,包括删除共享内存、关闭共享内存读取线程等操作。
发送接口:应用进程调用该接口实现将源实体的数据发送给目的实体。
订阅接口:应用进程调用该接口实现实体对消息类型的订阅。
退订接口:应用进程调用该接口实现实体对消息类型的退订。
发布接口:应用进程调用该接口实现将某种消息类型数据发布给各订阅实体。
实体-共享内存信息缓存:各应用进程独立缓存的实体-共享内存映射信息,实体注册、注销时,各应用进程与全局实体注册信息保持同步,可实现各应用进程对实体共享内存的高效快速访问。
本发明实施了一种IPC通信实体注册管理方法,其使用全局独立的一块共享内存记录实体注册信息,对各进程实体注册进行统一管理,如图2所示。实体注册信息包含实体名称、共享内存ID(使用系统接口访问共享内存的资源标识)、所属进程PID(进程标识号,操作系统自动分配给每个进程的唯一标识号)。实体注册流程如图3所示,具体如下:
(1)首先访问全局共享内存,查询实体注册信息。
(2)若不存在该实体注册信息,则成功注册,创建共享内存,添加实体注册信息。
(3)若已存在该实体注册信息,实体所属进程已经退出运行,则成功注册,创建共享内存,更新实体注册信息。
(4)若已存在该实体注册信息,实体所属进程运行中,则注册失败,返回错误提示,即表示“实体已被占用”。
上述实体注册管理方法的优点是:各实体分别创建独立可读写的共享内存,便于进行多对多通信,并且实体注册对各进程互斥,保证了唯一性和数据的一致性。当实体进行IPC通信时,可根据全局实体注册信息中存储的共享内存ID,访问目的实体共享内存,从而实现IPC通信。但是当面临多进程高并发IPC通信场景,各实体并发读写时,都需要访问全局实体注册信息获取共享内存ID,这导致竞争开销加剧,限制了高并发IPC数据交互性能。
为解决上述所提到的高并发IPC数据交互性能问题,本发明提出了一种实体-共享内存映射信息分布式存储及同步方法,即各进程独立存储实体-共享内存映射信息。进行IPC通信时,首先从本进程存储的实体-共享内存映射信息,查询共享内存ID,从而访问目的共享内存,进行IPC通信。若查询不到,则转而通过全局实体注册信息查询,并将全局实体-共享内存映射信息与本进程同步。在实体注册注销时,也需要将变更的实体-共享内存映射信息发布给其他进程,完成同步。同步实体-共享内存映射信息需要用到本发明的另一项功能,即订阅发布通信功能。
本发明实施了一种消息类型订阅管理方法,其使用全局独立的一块共享内存记录订阅信息,如图2所示。该共享内存分为消息类型检索区、动态存储区,其中消息类型检索区存储实体订阅的消息类型、订阅实体链表首地址,动态存储区存储订阅实体链表各元素。具体细节如下:
(1)消息类型检索区是一块静态分配的数组空间,其元素地址连续,在遍历检索消息类型时,可以获得高效的检索效率。
(2)动态存储区是一块可自由分配释放的空间。和操作系统的堆内存管理方式相似,动态存储区采取内存管理技术,即使用游标法模拟实现内存的动态分配和释放,从而支撑了订阅实体链表元素的添加和删除操作,能够灵活高效地使用共享内存空间。
(3)实体进行订阅/发布请求时,首先访问消息类型检索区,检索该消息类型。存储消息类型时,按照数值大小升序排列存储,因此检索时可通过二分法快速查找。若不存在该消息类型,则在消息类型检索区添加新的消息类型元素,创建实体订阅链表。若已存在该消息类型,则访问动态存储区,查询订阅实体链表信息。
(4)查询订阅实体链表信息时,若为实体订阅请求,且无该实体订阅记录,则申请分配元素空间,在订阅实体链表中添加该实体。若为实体退订请求,其存在该实体订阅记录,则在订阅实体链表中删除该实体,释放元素空间。若为实体发布请求,则将链表全部订阅实体作为结果返回。
下面解释两个不同进程实体之间的IPC通信过程,也即点对点IPC通信。共享内存的创建、删除、查询、访问以及信号量的创建、删除、增减操作是实现IPC通信的基础。收端和发端通过将共享内存映射到本进程地址空间,实现对共享内存的读写操作。信号量可以被用来实现共享内存读写互斥和跨进程同步。点对点IPC通信过程如图4所示,具体如下:
(1)发端从本进程缓存中查询目的实体-共享内存映射信息,若查询失败,从全局实体注册信息中同步目的实体-共享内存映射信息。
(2)若发端查找到目的实体注册信息,根据共享内存ID,将共享内存映射到本进程地址空间,若打开共享内存失败,表明实体已注销,返回发送失败。
(3)若发端未查找到目的实体注册信息,表明目的实体未注册或已注销,返回发送失败。
(4)共享内存的数据信息以循环队列方式存储,队列的首尾地址根据数据读写的方向循环增长。循环队列的元素包含消息内容及消息长度信息。发端在写入数据前,先进行互斥锁保护,将数据加入到循环队列末尾,并将共享内存信号量加一。
(5)收端共享内存读取线程等待获取共享内存信号量,若等待信号量成功,则进入读取操作。在读取数据前,先进行互斥锁保护,将数据从循环队列头部取出,并添加到消息缓冲队列。
(6)收端目的实体接收线程从消息缓冲队列取出消息,并通过执行实体接收回调函数,进行接收处理。
上述点对点IPC通信中,收端使用了双线程(共享内存读取线程、实体接收线程)以及消息缓冲队列,实现了对共享内存数据的缓冲处理,提高了读取效率,可以缓冲数据流量压力。但是在高并发IPC通信场景中,存在多对一大流量高速交互数据的场景,仅依靠收端的双线程和缓冲队列方式,仍不足以应对可能的流量压力,当共享内存数据持续累积、共享内存空间消耗完毕,将有可能造成数据的丢失。
针对上面提出的问题,本发明提出了一种共享内存的快速扩容技术,其过程如图5所示,具体如下:
(1)收端从共享内存读取消息时,检查共享内存容量,若使用过半,则对共享内存设置扩容状态标记。
(2)收端创建两倍大小新的共享内存。
(3)将原共享内存数据拷贝到新的共享内存。
(4)更新实体注册信息,并将更新后的实体-共享内存映射信息发布给其他进程,完成同步。
(5)发端发送消息,检查到共享内存扩容状态标记,进入等待。
(6)发端检查到已完成共享内存扩容和信息同步,退出等待。
(7)继续收发消息。
上述共享内存的快速扩容技术,相比较对各个实体固定分配大空间共享内存,能够节省系统内存占用,对流量压力具有自适应调整能力。
如图6所示,实体注销过程具体如下:
(1)从全局实体注册信息中,查询实体共享内存ID。
(2)使用共享内存ID进行共享内存注销操作。
(3)在全局实体注册信息中,删除该实体记录。
(4)在全局消息类型订阅实体信息中,删除该实体所有订阅记录。
(5)发布实体注销信息到各进程进行同步。
本发明提供了一种基于共享内存的高并发IPC数据交互方法的思路及方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
Claims (10)
1.一种基于共享内存的高并发IPC数据交互方法,其特征在于,包括以下步骤:
步骤1,实体注册:实体是业务进程调用接口进行IPC通信的基本对象,通过全局唯一的共享内存,记录全局实体注册信息,即实体-共享内存映射信息;当业务进程注册实体时,查询全局实体注册信息,检查实体是否被抢占注册,若为新增实体,则创建实体共享内存,添加实体注册信息,更新并和其他进程同步实体-共享内存映射信息;
步骤2,通过全局唯一的共享内存,记录实体订阅消息类型;
步骤3,实体点对点发送消息,查询目的实体-共享内存映射信息,将数据写入目的共享内存,目的端接收线程将数据推送给目的实体;
步骤4,实体发布消息,查询全局消息订阅记录,通过步骤3将消息发给各订阅实体;
步骤5,实体接收消息时,若共享内存容量使用过半,则对共享内存进行快速扩容,扩容完成后,更新并和其他进程同步实体-共享内存映射信息;
步骤6,实体注销时,注销共享内存,删除实体注册信息,更新并和其他进程同步实体-共享内存映射信息。
2.根据权利要求1所述的一种基于共享内存的高并发IPC数据交互方法,其特征在于,步骤1中,各实体分别创建独立读写的共享内存用于进行多对多通信,实体注册对各进程互斥,所述实体注册方法包括:
步骤1-1,查询全局实体注册信息,检查实体注册状态;
步骤1-2,若不存在该实体注册信息,则成功注册,创建共享内存,添加实体注册信息,并将新注册的实体-共享内存映射信息发布给其他进程,完成同步;
步骤1-3,若已存在该实体注册信息,实体所属进程已经退出运行,则成功注册,创建共享内存,更新实体注册信息,并将更新后的实体-共享内存映射信息发布给其他进程,完成同步;
步骤1-4,若已存在该实体注册信息,实体所属进程运行中,则注册失败,返回错误提示,即表示实体已被占用。
3.根据权利要求2所述的一种基于共享内存的高并发IPC数据交互方法,其特征在于,步骤1中,实体-共享内存映射信息分布式存储及同步的方法包括:各进程独立存储实体-共享内存映射信息;进行IPC通信时,首先从本进程存储的实体-共享内存映射信息,查询共享内存ID,并访问目的共享内存,进行IPC通信;若查询不到,则转而通过全局实体注册信息查询,并将全局实体-共享内存映射信息与本进程同步;在实体注册注销时,将变更的实体-共享内存映射信息发布给其他进程,完成同步。
4.根据权利要求3所述的一种基于共享内存的高并发IPC数据交互方法,其特征在于,步骤2中所述全局唯一的共享内存,分为消息类型检索区和动态存储区,其中消息类型检索区存储实体订阅的消息类型和订阅实体链表首地址;动态存储区存储订阅实体链表各元素。
5.根据权利要求4所述的一种基于共享内存的高并发IPC数据交互方法,其特征在于,步骤2中所述全局唯一的共享内存中的消息类型检索区是一块静态分配的数组空间,其元素地址连续,在遍历检索消息类型时,进行高效检索。
6.根据权利要求5所述的一种基于共享内存的高并发IPC数据交互方法,其特征在于,步骤2中所述全局唯一的共享内存中的动态存储区是一块自由分配释放的空间;和操作系统的堆内存管理方式相似,动态存储区采取内存管理技术,即使用游标法模拟实现内存的动态分配和释放,从而支撑订阅实体链表元素的添加和删除操作。
7.根据权利要求6所述的一种基于共享内存的高并发IPC数据交互方法,其特征在于,步骤2中所述记录实体订阅消息类型方法包括:
实体进行订阅或发布请求时,首先访问消息类型检索区,检索该消息类型;存储消息类型时,按照数值大小升序排列存储;检索时通过二分法查找;若不存在该消息类型,则在消息类型检索区添加新的消息类型元素,创建实体订阅链表;若已存在该消息类型,则访问动态存储区,查询订阅实体链表信息;
查询订阅实体链表信息时,若为实体订阅请求,且无该实体订阅记录,则申请分配元素空间,在订阅实体链表中添加该实体;若为实体退订请求,其存在该实体订阅记录,则在订阅实体链表中删除该实体,释放元素空间;若为实体发布请求,则将链表全部订阅实体作为结果返回。
8.根据权利要求7所述的一种基于共享内存的高并发IPC数据交互方法,其特征在于,步骤3中,点对点发送消息时,发端将消息写入目的共享内存,目的端即收端接收线程将数据推送给目的实体,具体方法包括:
步骤3-1,通过循环队列,在共享内存中记录消息内容;
步骤3-2,接收实体在成功注册并创建共享内存后,启动共享内存读取线程和消息接收处理线程,阻塞等待消息写入;
步骤3-3,发端从本进程缓存中查询目的实体共享内存信息,若查询失败,从全局实体-共享内存信息中拉取目的实体共享内存信息;
步骤3-4,发端将消息写入目的共享内存循环队列,队列信号量加1;
步骤3-5,收端共享内存读取线程,从共享内存中拉取数据,添加到接收处理消息队列,通过消息接收处理线程,负责消费接收处理消息队列的消息,执行目的实体的消息处理回调。
9.根据权利要求8所述的一种基于共享内存的高并发IPC数据交互方法,其特征在于,步骤5中,实体接收消息时,若共享内存容量使用过半,则对共享内存进行快速扩容,方法包括:
步骤5-1,收端从共享内存读取消息时,检查共享内存容量,若使用过半,则对共享内存设置扩容状态标记;
步骤5-2,发端发送时,若检查到共享内存进入到扩容状态,则发送进入等待;
步骤5-3,收端在设置扩容状态标记后,创建两倍大小的新共享内存,将原共享内存队列缓存消息拷贝到新共享内存,更新实体注册信息,并将更新后的实体-共享内存映射信息发布给其他进程,完成同步,最后设置共享内存扩容完成标记;
步骤5-4,发端检查到共享内存扩容完成标记,并且更新完成新的共享内存信息后,退出等待,继续发送消息,写入新的共享内存。
10.根据权利要求9所述的一种基于共享内存的高并发IPC数据交互方法,其特征在于,步骤6中,所述实体注销时,查询全局实体注册信息,检查实体注册状态,进行注销操作,具体方法包括:
步骤6-1,若实体已注册并且属于当前进程,则进行注销操作,否则注销失败;
步骤6-2,根据实体-共享内存映射信息,对共享内存进行注销操作;
步骤6-2,在全局实体-共享内存映射信息中删除该实体信息;
步骤6-3,在全局实体订阅信息中,删除该实体所有的订阅记录;
步骤6-4,发布实体注销信息到各进程进行同步。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210390727.XA CN114490141B (zh) | 2022-04-14 | 2022-04-14 | 一种基于共享内存的高并发ipc数据交互方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210390727.XA CN114490141B (zh) | 2022-04-14 | 2022-04-14 | 一种基于共享内存的高并发ipc数据交互方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114490141A true CN114490141A (zh) | 2022-05-13 |
CN114490141B CN114490141B (zh) | 2022-07-05 |
Family
ID=81487465
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210390727.XA Active CN114490141B (zh) | 2022-04-14 | 2022-04-14 | 一种基于共享内存的高并发ipc数据交互方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114490141B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115242898A (zh) * | 2022-06-06 | 2022-10-25 | 浪潮通信技术有限公司 | 协议栈与物理层进程间的通信方法及装置 |
CN115858205A (zh) * | 2023-02-27 | 2023-03-28 | 中国人民解放军国防科技大学 | 基于内存黑板机制的仿真组件交互方法、装置和设备 |
CN116069530A (zh) * | 2023-04-03 | 2023-05-05 | 中国人民解放军国防科技大学 | 基于内存池的仿真引擎数据共享黑板系统 |
CN116401081A (zh) * | 2023-06-09 | 2023-07-07 | 中汽智联技术有限公司 | 数据共享方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103607428A (zh) * | 2013-10-30 | 2014-02-26 | 华为技术有限公司 | 一种访问共享内存的方法和装置 |
WO2016082594A1 (zh) * | 2014-11-26 | 2016-06-02 | 中兴通讯股份有限公司 | 数据更新处理方法及装置 |
CN107070977A (zh) * | 2017-01-13 | 2017-08-18 | 广西电网有限责任公司电力科学研究院 | 一种能够减少延时的数据传输方法 |
CN108984317A (zh) * | 2018-06-21 | 2018-12-11 | 北京奇虎科技有限公司 | 进程间通信ipc的实现方法和装置 |
CN112463400A (zh) * | 2020-10-30 | 2021-03-09 | 中国电子科技集团公司第五十二研究所 | 一种基于共享内存的实时数据分发方法及装置 |
CN113849428A (zh) * | 2020-06-28 | 2021-12-28 | 华为技术有限公司 | 共享内存权限配置方法,内存单元和系统 |
CN114003413A (zh) * | 2021-12-30 | 2022-02-01 | 深圳佑驾创新科技有限公司 | 一种ipc数据通信方法、装置、设备及介质 |
-
2022
- 2022-04-14 CN CN202210390727.XA patent/CN114490141B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103607428A (zh) * | 2013-10-30 | 2014-02-26 | 华为技术有限公司 | 一种访问共享内存的方法和装置 |
WO2016082594A1 (zh) * | 2014-11-26 | 2016-06-02 | 中兴通讯股份有限公司 | 数据更新处理方法及装置 |
CN107070977A (zh) * | 2017-01-13 | 2017-08-18 | 广西电网有限责任公司电力科学研究院 | 一种能够减少延时的数据传输方法 |
CN108984317A (zh) * | 2018-06-21 | 2018-12-11 | 北京奇虎科技有限公司 | 进程间通信ipc的实现方法和装置 |
CN113849428A (zh) * | 2020-06-28 | 2021-12-28 | 华为技术有限公司 | 共享内存权限配置方法,内存单元和系统 |
CN112463400A (zh) * | 2020-10-30 | 2021-03-09 | 中国电子科技集团公司第五十二研究所 | 一种基于共享内存的实时数据分发方法及装置 |
CN114003413A (zh) * | 2021-12-30 | 2022-02-01 | 深圳佑驾创新科技有限公司 | 一种ipc数据通信方法、装置、设备及介质 |
Non-Patent Citations (1)
Title |
---|
MY CUP OF TEA: "完善博文 共享内存一写多读无锁实现的代码逻辑部分", 《HTTPS://BLOG.CSDN.NET/CHYABC123456HH/ARTICLE/DETAILS/111909478》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115242898A (zh) * | 2022-06-06 | 2022-10-25 | 浪潮通信技术有限公司 | 协议栈与物理层进程间的通信方法及装置 |
CN115242898B (zh) * | 2022-06-06 | 2024-04-19 | 浪潮通信技术有限公司 | 协议栈与物理层进程间的通信方法及装置 |
CN115858205A (zh) * | 2023-02-27 | 2023-03-28 | 中国人民解放军国防科技大学 | 基于内存黑板机制的仿真组件交互方法、装置和设备 |
CN116069530A (zh) * | 2023-04-03 | 2023-05-05 | 中国人民解放军国防科技大学 | 基于内存池的仿真引擎数据共享黑板系统 |
CN116401081A (zh) * | 2023-06-09 | 2023-07-07 | 中汽智联技术有限公司 | 数据共享方法 |
CN116401081B (zh) * | 2023-06-09 | 2023-09-01 | 中汽智联技术有限公司 | 数据共享方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114490141B (zh) | 2022-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114490141B (zh) | 一种基于共享内存的高并发ipc数据交互方法 | |
US11175832B2 (en) | Thread groups for pluggable database connection consolidation in NUMA environment | |
US6952741B1 (en) | System and method for synchronizing copies of data in a computer system | |
US6339793B1 (en) | Read/write data sharing of DASD data, including byte file system data, in a cluster of multiple data processing systems | |
US5835908A (en) | Processing multiple database transactions in the same process to reduce process overhead and redundant retrieval from database servers | |
US8799213B2 (en) | Combining capture and apply in a distributed information sharing system | |
US8185716B2 (en) | Memory system and method for using a memory system with virtual address translation capabilities | |
US8818942B2 (en) | Database system with multiple layer distribution | |
US20040054858A1 (en) | Method and mechanism for on-line data compression and in-place updates | |
US20050234867A1 (en) | Method and apparatus for managing file, computer product, and file system | |
CN102339283A (zh) | 集群文件系统访问控制方法及集群节点 | |
US6711559B1 (en) | Distributed processing system, apparatus for operating shared file system and computer readable medium | |
CN102314506B (zh) | 基于动态索引的分布式缓冲区管理方法 | |
US20120290595A1 (en) | Super-records | |
CN111400268A (zh) | 一种分布式持久性内存事务系统的日志管理方法 | |
US20190347167A1 (en) | Primary Node-Standby Node Data Transmission Method, Control Node, and Database System | |
CN110555001B (zh) | 数据处理方法、装置、终端及介质 | |
CN109344122B (zh) | 一种基于文件预创策略的分布式元数据管理方法及系统 | |
CN112307119A (zh) | 数据同步方法、装置、设备及存储介质 | |
US8281321B2 (en) | Method, system and storage medium for implementing a message board cache system | |
CN112000287A (zh) | 一种io请求处理装置、方法、设备及可读存储介质 | |
CN113377868A (zh) | 一种基于分布式kv数据库的离线存储系统 | |
US6732137B1 (en) | Performance optimization for data sharing across batch sequential processes and on-line transaction processes | |
CN110147345A (zh) | 一种基于rdma的键值存储系统及其工作方法 | |
CN107864215B (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 |