CyberRT_record解析代码走读

共享内存

共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。
   两个不同进程A、B共享内存的意思是,同一块物理内存被映射到 进程A、B各自的进程地址空间。
   进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互 斥锁和信号量都可以
   
对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,
而 共享内存则只拷贝两次数据[1]:一次从输入文件到共享内存区,另一次从共享内存区到输出文件  
memcpy
    指的是C和C++使用的内存拷贝函数,函数原型为void *memcpy(void *destin, void *source, unsigned n) 
strcpy和memcpy 	
    用套接字不仅可以实现跨进程通信,还可以实现面向连接(TCP)和面向无连接(UDP)这两种主流网络通信方式
	共享存储区(Share Memory)是Linux系统中 通信速度最高 的通信机制。

 uint32_t u:代表 unsigned 即无符号,即定义的变量不能为负数; int:代表类型为 int 整形; 32:代表四个字节	

第一步

record
  __init__
   self._open(f,mode,allow_unindexed)
      self._mode =mode
   if mode=="r": self._open_read(self,f) 
   
   _open_read(self,f) 
      self._create_reader()
	     self._reader = Reader(self)
	  self._reader.start_reading()
 reader
     start_reading(self)
	   _create_message_type_pool()   	   

第二步

record
   read_message()
   self._reader.read_message()
reader 
   read_message()
     ._create_message()

说明

proto_message
single_message	
    channel_name
    content		

解析record说明

1.预加载和缓存
  在初始化时预加载了一系列 Protobuf 描述文件(.desc 文件),并将它们存储在缓存中。
  这种预加载和缓存机制避免了在每次需要时都解析这些描述文件,从而显著提高了运行时的效率。
2、动态查找和构建
   通过动态查找和构建 FileDescriptor 和 Descriptors.Descriptor 对象,
    可以根据需要解析和访问具体的 Protobuf 消息类型。这对于处理动态生成或在运行时确定的 Protobuf 消息类型非常有效。
3、减少冗余解析
  在处理大量 Protobuf 消息时,避免重复解析相同的描述信息可以节省大量的时间和资源。
   通过缓存已解析的描述符,可以快速访问这些信息,而无需重新执行解析操作

参考

 CyberRT使用笔记 https://blog.csdn.net/xhtchina/article/details/111587642
posted @ 2024-05-06 20:34  辰令  阅读(20)  评论(0编辑  收藏  举报