首页 > 其他分享 >CyberRT_record解析代码走读

CyberRT_record解析代码走读

时间:2024-05-06 20:45:10浏览次数:20  
标签:解析 走读 CyberRT reader record ._ message 共享内存 self

共享内存

共享内存可以说是最有用的进程间通信方式,也是最快的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,reader,record,._,message,共享内存,self
From: https://www.cnblogs.com/ytwang/p/18175846

相关文章

  • C#中的记录(record)简介
    record是一种语法糖。标准的record用法有“recordclass”和"recordstruct"两种,分别表示记录类和记录构造。是“引用”和“值”的差别。单独使用record表示"recordclass"。语法:脱胎于构造函数。 recordPerson(stringXm,intNl); 或者recordPerson(stringXm,intNl)......
  • CyberRT_概念组件以及基本流程
    CyberRT两大功能任务调度数据通信基本组件componentnodechannelreader/writersevice/clientTaskroutine通信1.通信的方式:01.intras-process02.sharedMemory 03.socket--fastRTPSDDS也是采用发布/订阅机制进行网络通讯通过抽象出DDS接口,让RO......
  • DP Record
    从2024/5/4往后开始记录捏。T1.给你一棵树,定义一个集合的权值为\(\dfrac{\sum_{x\inS}V_x}{\sum_{x\inS}C_x}\)。若一个点\(\inS\),则其父亲也必须\(\inS\)并且\(|S|=k\)。求满足条件的所有集合的最大价值。\(n,k\le2500\)。Solution:注意到那一个奇妙的式子......
  • CyberRT_数据解析和处理
    CyberRT01.数据传输Apollo项目CyberRT主要包括下面三个方面:通信性能优化去中心化网络拓扑数据兼容性扩展ROS系统中,使用msg描述文件定义模块间的消息接口Apollo选择了Google的ProtocolBuffers格式数据 数据进行传输的时候,是一个......
  • MBIST和BISR+循环移位和强制转换+verdi操作+vip需要disable auto recording+vim设置某
    MBIST和BISRhttps://blog.csdn.net/liubin1222/article/details/103995449https://zhuanlan.zhihu.com/p/161185302进行内存修复需要两步:首先在可修复内存测试期间,由MBIST控制器诊断出的故障。第二步是修复内存,确认修复签名。可修复的存储器都有带修复签名的寄存器。MBIST(Me......
  • ETL工具-nifi干货系列 第十四讲 nifi处理器QueryDatabaseTableRecord查询表数据实战教
    1、处理器QueryDatabaseTableRecord和处理器QueryDatabaseTable比较相似,该组件生成一个SQL查询,或者使用用户提供的语句,并执行它以获取所有在指定的最大值列中值大于先前所见最大值的行。QueryDatabaseTable的查询结果将被转换为Avro,而QueryDatabaseTableRecord的查询结果则被......
  • ETL工具-nifi干货系列 第八讲 处理器PutDatabaseRecord 写数据库(详细)
    1、本节通过一个小例子来讲解下处理器PutDatabaseRecord,该处理器的作用是将数据写入数据库。如下流程通过处理器GenerateFlowFile生成数据,然后通过处理器JoltTransformJSON转换结构,最后通过处理器PutDatabaseRecord将数据写入数据库。如下图所示 2、处理器GenerateFlowFile......
  • 中间件_ROS2和CyberRT
    中间件中间件的主要任务,是负责各类应用软件模块之间的通信以及对系统资源的调度。进程间通信的机制(IPC:inter-processcommuniction)内容都是与具体应用逻辑无关的,包括数据通信、通信安全、系统资源调度等1.Ros2.iceoryx「冰羚」RouDi的名称由来是’‘Rou’‘ting和......
  • Python数据匹配和记录链接库之recordlinkage使用详解
    概要Python的recordlinkage库为数据匹配和记录链接提供了一个强大的工具集,使得从不同数据源识别重复或相关记录变得简单高效。这对于数据清洗、合并数据集、实体识别等任务至关重要。recordlinkage库简介recordlinkage提供了一套全面的工具来进行复杂的记录比较、匹配和......
  • enumToObject<T extends Record<keyof T, number | string>>
    exportfunctionenumToObject<TextendsRecord<keyofT,number|string>>( enumObj:T,):{[KinkeyofT]:ROUTE_ID_KEY}{ constobj={}as{[KinkeyofT]:T[K]}; for(constkeyinenumObj){ letkeyStr=enumObj[key]; if(typeofk......