-
Notifications
You must be signed in to change notification settings - Fork 353
全局常量定义
木头云 edited this page Mar 10, 2020
·
5 revisions
#include "ipc.h"
// 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 |
当收发队列(环形缓冲区,大小为256)已满时,发送方的默认等待时间,单位ms |
若超出此时间队列仍然为满,则最早的数据包会被新数据覆盖(丢包)。 |
namespaces
classes
ipc::buffer
ipc::circ::elem_array
ipc::circ::queue
ipc::route
ipc::channel
ipc::spin_lock
ipc::rw_lock
ipc::shm::handle
ipc::tls::pointer
ipc::mem::pool_alloc
head files