共享内存
共享内存可以说是最有用的进程间通信方式,也是最快的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