Skip to content

全局常量定义

木头云 edited this page Mar 4, 2020 · 5 revisions
// constants

enum : std::size_t {
    invalid_value   = (std::numeric_limits<std::size_t>::max)(),
    data_length     = 64,
    large_msg_limit = data_length,
    large_msg_cache = 32,
    default_timeout = 100 // ms
};
枚举 说明
invalid_value 全局size_t类型的无效值定义
data_length 数据包的最小粒度。
ipc的底层通讯机制基于环形队列,队列中的每项数据大小则是固定的。此枚举定义了数据包的最小粒度,若大于此大小的数据包,将被拆分为若干个包依次放入队列中,通过多个收发周期发出。
large_msg_limit 定义ipc中大数据包的大小。
由于数据发送存在data_length的限制,最小粒度太大会浪费内存;而太小又会导致收发效率低下。为了提高大包的收发效率,针对 大于 large_msg_limit的包,ipc将尝试通过临时的共享内存区域在一个周期内完成收发动作。这些临时创建的共享内存区域有大有小,ipc内部采用了分级池对它们进行缓存,尽量保证大包在频繁收发时,临时区域的复用度。
若临时共享内存区域获取失败,ipc会使用data_length的长度进行拆包,通过多个收发周期发出。
large_msg_cache 定义ipc中大数据包缓冲池的大小。
若某个分级缓冲池中的共享内存个数大于large_msg_cache,多余的临时共享内存会被释放。
large_msg_cache不能大于255。
default_timeout 当收发队列已满时,发送方的默认等待时间,单位ms
若超出此时间队列仍然为满,则最早的数据包会被新数据覆盖(丢包)。

Home
Tutorial

namespaces

classes

head files

Clone this wiki locally