System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于共享内存的进程间实例数据共享方法技术_技高网

一种基于共享内存的进程间实例数据共享方法技术

技术编号:41247868 阅读:8 留言:0更新日期:2024-05-09 23:57
本发明专利技术特别涉及一种基于共享内存的进程间实例数据共享方法。该基于共享内存的进程间实例数据共享方法,多个进程使用相同的key值通过系统调用mmap映射同一块物理内存;ME进程将元数据写入共享内存,将元数据在共享内存中的偏移量通过RPC发给AE进程;AE进程映射共享内存后,读取指定位置的数据,实现数据的共享,进而保证多个进程对数据的访问一致性。该基于共享内存的进程间实例数据共享方法,不仅可以在进程间共享数据内容,还可以共享数据之上的行为,从而对数据的操作进行约束,实现规范化,既保证了进程间通信,又保证了数据在多个进程内的一致性。

【技术实现步骤摘要】

本专利技术涉及分元数据共享,特别涉及一种基于共享内存的进程间实例数据共享方法


技术介绍

1、kdp是一个集云(c)边(e)端(t)一体的时序数据库平台,系统正常工作时,是多个进程同时在运行,进程间通过共享内存实现通信。系统数据分为元数据和数据两部分,其中元数据保存了租户、数据库、表等描述信息,数据则是信号采集器采集的信息,保存在数据库的表中。

2、元数据作为系统的描述信息,需要被多个进程访问,包括读或写,若进程通过socket通信来共享元数据信息,存在如下问题:

3、1)、元数据信息会在每个进程的内存中保存一份副本,一个进程修改后,需要及时的向其他进程通信,存在数据不一致的风险;

4、2)、进程间操作元数据的行为各异,不能规范元数据之上的行为操作。基于进程间通过socket共享数据的缺点,公开了一种基于共享内存的进程间实例数据共享方法,不仅可共享数据本身,还可共享数据之上的行为,解决了数据不一致等风险。

5、基于上述情况,本专利技术提出了一种基于共享内存的进程间实例数据共享方法。


技术实现思路

1、本专利技术为了弥补现有技术的缺陷,提供了一种简单高效的基于共享内存的进程间实例数据共享方法。

2、本专利技术是通过如下技术方案实现的:

3、一种基于共享内存的进程间实例数据共享方法,其特征在于:多个进程使用相同的key值通过系统调用mmap映射同一块物理内存;me进程将元数据写入共享内存,将元数据在共享内存中的偏移量通过rpc(remote procedure call protocol,远程过程调用协议)发给ae进程;ae进程映射共享内存后,读取指定位置的数据,实现数据的共享,进而保证多个进程对数据的访问一致性。

4、具体实现步骤如下:

5、步骤s1、me进程启动后,使用全局唯一的key值,调用共享内存shmget函数获取一段共享内存;并将共享内存的开始部分,定义为header区域,固定长度64m,用于存放共享内存的描述信息;将共享内存的后半部定义为body区域,用于存放元数据信息;

6、所述header区域是一个map结构体,key值为元数据的标识,value值为元数据存放在body区域的位置,即数据在共享内存中的偏移量offset;

7、me进程在body区域申请一块内存空间,写入元数据信息table_meta_1,之后将数据的位置信息offset记录到header区域的map中,其中key值为table_1,value值为偏移量offset;header区域的map相当于一个索引;

8、步骤s2、ae进程启动后,同样使用全局唯一key值,通过共享内存shmget函数映射与me进程相同的一块共享空间;header区域的长度是固定的,起始在偏移量offset=0,通过类型转换获取header对应的map结构体,以实现共享map数据;

9、ae进程拿到map后,通过key值table_1获取目标数据在共享内存中的位置,即偏移量offset;

10、步骤s3、ae进程获取偏移量offset后,通过类型转换获取具体的元数据信息table_meta_1;元数据信息在ae进程内通过const修饰,只能进行读操作;me进程则不受const限制,具有读和写的权限。

11、所述步骤s1中,共享内存根据数据的不同生命周期,将申请的数据放入不同的块内;将共享内存的body区域划分为系统system区域和流数据tsdata区域;系统system区域用于存放全局的共享信息,生命周期长;流数据tsdata区域用于存放ae采集的数据,数据flush持久化后即可释放,生命周期短。

12、所述步骤s1中,申请共享内存时,若申请的内存占用小于阈值的请求,则认为是小内存,小内存首先在线程的本地缓存threadlocalcache进行申请,此时申请内存无需加锁;本地缓存占用64m,是一次性从中心缓存centralcache申请而来;

13、当本地缓存用完后,再去中心缓存centralcache再次申请64m空闲空间,此时存在并发问题,需要加上排它锁。

14、所述步骤s1中,若申请的内存占用大于阈值的请求,则认为是大内存;大内存申请则跳过线程的本地缓存threadlocalcache,直接去中心缓存centralcache申请;此时也存在并发操作,需要加上排它锁。

15、所述步骤s1中,若在共享内存分配的数据偏移量未记录在header区域中,则通过rpc告知其他进程数据在共享内存中的位置;

16、具体实现步骤如下:

17、步骤s1.1、进程ae在共享内存申请内存空间,初始化数据,计算数据在共享内存中相对于共享内存的起始位置g_shm_header的偏移量offset,并将计算结果通过rpc方式告诉进程me;

18、步骤s1.2、me进程获取到偏移量offset后,获取目标数据在共享内存中的起始地址,再根据目标数据结构的长度,通过类型转换获取目标数据;

19、步骤s1.3、me进程在目标数据上执行写操作,由于是在共享内存执行写操作,ae进程能够实时查看到me进程修改的数据。

20、一种基于共享内存的进程间实例数据共享设备,其特征在于:包括存储器和处理器;所述存储器用于存储计算机程序,所述处理器用于执行所述计算机程序时实现上述的方法步骤。

21、一种可读存储介质,其特征在于:所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的方法步骤。

22、本专利技术的有益效果是:该基于共享内存的进程间实例数据共享方法,不仅可以在进程间共享数据内容,还可以共享数据之上的行为,从而对数据的操作进行约束,实现规范化,既保证了进程间通信,又保证了数据在多个进程内的一致性。

本文档来自技高网...

【技术保护点】

1.一种基于共享内存的进程间实例数据共享方法,其特征在于:多个进程使用相同的key值通过系统调用mmap映射同一块物理内存;ME进程将元数据写入共享内存,将元数据在共享内存中的偏移量通过RPC发给AE进程;AE进程映射共享内存后,读取指定位置的数据,实现数据的共享,进而保证多个进程对数据的访问一致性。

2.根据权利要求1所述的基于共享内存的进程间实例数据共享方法,其特征在于:

3.根据权利要求2所述的基于共享内存的进程间实例数据共享方法,其特征在于:所述步骤S1中,共享内存根据数据的不同生命周期,将申请的数据放入不同的块内;将共享内存的Body区域划分为系统system区域和流数据tsdata区域;系统system区域用于存放全局的共享信息,生命周期长;流数据tsdata区域用于存放AE采集的数据,数据Flush持久化后即可释放,生命周期短。

4.根据权利要求2所述的基于共享内存的进程间实例数据共享方法,其特征在于:所述步骤S1中,申请共享内存时,若申请的内存占用小于阈值的请求,则认为是小内存,小内存首先在线程的本地缓存ThreadLocalCache进行申请,此时申请内存无需加锁;

5.根据权利要求2所述的基于共享内存的进程间实例数据共享方法,其特征在于:所述步骤S1中,若申请的内存占用大于阈值的请求,则认为是大内存;大内存申请则跳过线程的本地缓存ThreadLocalCache,直接去中心缓存CentralCache申请;此时也存在并发操作,需要加上排它锁。

6.根据权利要求2所述的基于共享内存的进程间实例数据共享方法,其特征在于:所述步骤S1中,若在共享内存分配的数据偏移量未记录在Header区域中,则通过RPC告知其他进程数据在共享内存中的位置;

7.一种基于共享内存的进程间实例数据共享设备,其特征在于:包括存储器和处理器;所述存储器用于存储计算机程序,所述处理器用于执行所述计算机程序时实现如权利要求1至6任意一项所述的方法步骤。

8.一种可读存储介质,其特征在于:所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6任意一项所述的方法步骤。

...

【技术特征摘要】

1.一种基于共享内存的进程间实例数据共享方法,其特征在于:多个进程使用相同的key值通过系统调用mmap映射同一块物理内存;me进程将元数据写入共享内存,将元数据在共享内存中的偏移量通过rpc发给ae进程;ae进程映射共享内存后,读取指定位置的数据,实现数据的共享,进而保证多个进程对数据的访问一致性。

2.根据权利要求1所述的基于共享内存的进程间实例数据共享方法,其特征在于:

3.根据权利要求2所述的基于共享内存的进程间实例数据共享方法,其特征在于:所述步骤s1中,共享内存根据数据的不同生命周期,将申请的数据放入不同的块内;将共享内存的body区域划分为系统system区域和流数据tsdata区域;系统system区域用于存放全局的共享信息,生命周期长;流数据tsdata区域用于存放ae采集的数据,数据flush持久化后即可释放,生命周期短。

4.根据权利要求2所述的基于共享内存的进程间实例数据共享方法,其特征在于:所述步骤s1中,申请共享内存时,若申请的内存占用小于阈值的请求,则认为是小内存,小内...

【专利技术属性】
技术研发人员:贾德星刘牧
申请(专利权)人:上海沄熹科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1