# data-visitor-dispatcher **Repository Path**: liudegui/data-visitor-dispatcher ## Basic Information - **Project Name**: data-visitor-dispatcher - **Description**: 仿 CyberRT 的 DataVisitor/DataDispatcher,Lock-free MPSC 观察者模式实现 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2024-12-01 - **Last Updated**: 2026-02-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: Cpp, 设计模式, 事件分发, 消息总线, 无锁 ## README ## Data Visitor Dispatcher 基于无锁 MPSC 消息总线的观察者模式示例,演示嵌入式场景下的数据分发架构。 ### 特性 - **无锁并发**: lock-free CAS (MPSC) 多生产者无锁并发发布 - **零堆分配**: Ring Buffer 嵌入消息存储,`FixedString` 栈缓冲替代 `std::string` - **单 worker 线程**: `ProcessBatch()` 一次遍历处理所有消息,线程数 O(1) - **编译期类型路由**: `std::variant` + `Subscribe` 类型安全订阅 - **内置背压**: 定长环形缓冲,生产者快于消费者时自动丢弃最旧消息 ### 两种实现 | 版本 | 文件 | 订阅方式 | 分发机制 | 适用场景 | |------|------|----------|----------|----------| | Component 版 | `examples/component_demo.cpp` | 运行时动态 | `FixedFunction` SBO 回调 | 需要动态增删订阅者 | | StaticComponent 版 | `examples/static_component_demo.cpp` | 编译期固定 | CRTP `Handle()` 内联 | 订阅者集合固定,追求零开销 | ### 技术对比 | 维度 | Component 版 | StaticComponent 版 | |------|-------------|-------------------| | 代码量 | ~110 行 / 1 文件 | ~95 行 / 1 文件 | | 堆分配 (每条消息) | 0 次 | 0 次 | | 线程数 | 2 (worker + main) | 2 (worker + main) | | 动态增删订阅者 | 支持 | 不支持 | | 间接调用 | `FixedFunction` (SBO,非堆) | 无 (可内联) | | 订阅者存储 | `shared_ptr` 堆分配 | 栈分配 | ### 构建与运行 依赖 [mccc-bus](https://gitee.com/liudegui/mccc-bus) 通过 CMake FetchContent 自动下载,无需手动克隆。 ```bash # 构建 (mccc-bus 自动下载) mkdir build && cd build cmake .. make -j$(nproc) # 运行 ./examples/component_demo # Component 版 (动态订阅) ./examples/static_component_demo # StaticComponent 版 (零开销) ``` ### 目录结构 ``` data-visitor-dispatcher/ ├── CMakeLists.txt ├── LICENSE ├── README.md └── examples/ ├── CMakeLists.txt ├── component_demo.cpp └── static_component_demo.cpp ``` ### 相关项目 - [mccc-bus](https://gitee.com/liudegui/mccc-bus): C++17 header-only 无锁消息总线 - [newosp](https://github.com/DeguiLiu/newosp): 工业级嵌入式 C++17 基础设施库 (基于 mccc-bus) - 技术文章: [嵌入式 C++ 技术专栏](https://deguiliu.github.io/embedded-cpp-articles/) ### License MIT