TCP 非阻塞发送的 Short Write 问题: 环形缓冲区 + epoll 事件驱动方案
非阻塞 TCP 发送在高吞吐嵌入式场景会遇到 short write。本文从一份 CSDN 环形缓冲方案入手,逐项分析它的 5 个缺陷 (非 2 幂、无界索引、内存泄漏、部分发送丢失、EAGAIN 误判) 并给出改进方案。
非阻塞 TCP 发送在高吞吐嵌入式场景会遇到 short write。本文从一份 CSDN 环形缓冲方案入手,逐项分析它的 5 个缺陷 (非 2 幂、无界索引、内存泄漏、部分发送丢失、EAGAIN 误判) 并给出改进方案。
深度剖析 liudegui/ringbuffer 的 SPSC 无锁环形缓冲区实现:缓存行对齐、2 的幂位掩码、wait-free 无重试设计、精确 acquire-release 内存序、FakeTSO 单核模式、批量 memcpy 等 12 项设计决策,每项都对应具体的硬件行为。
共享内存是 Linux 上延迟最低的 IPC 机制,但 POSIX shm_open/mmap 缺少同步、生命周期管理和崩溃恢复。本文剖析 newosp 中 ShmRingBuffer 的 CAS 无锁设计、ARM 内存序加固与缓存行对齐,并与 cpp-ipc 对比架构取舍。
线程间消息传递用 mutex + priority_queue + promise/future 组合会带来锁竞争和热路径堆分配。本文用 MCCC 无锁消息总线重写 SendMessage/PostMessage,并给出测试与 Sanitizer 验证结果。
无锁编程的原理梳理。从 CAS 原子操作的硬件实现出发,界定 lock-free 与 wait-free 的进展保证差异,分析 ABA 问题及其解法,说明 acquire/release 内存序的必要性,并以 SPSC/MPSC/MPMC 三种队列模式为主线串联设计与落地。
死锁与优先级反转的实战指南。用 6 个可编译运行的 C++ 示例复现 AB-BA 死锁、回调重入死锁、自死锁和优先级反转,逐一给出修复方案(全局锁序、std::scoped_lock、try_lock 回退、PTHREAD_PRIO_INHERIT、无锁架构),并纠正「编译优化导致死锁」的误解。
双重检查锁定 (DCLP) 是 C++ 并发编程中最臭名昭著的模式之一。2004 年 Scott Meyers 和 Andrei Alexandrescu 论证了它在 C++03 中不可移植地安全实现。本文从 DCLP 的历史缺陷出发,解释 C++11 内存模型如何修复它,对比 Magic Statics、acquire/release 原子操作和顺序一致性三种实现,并讨论嵌入式场景下的工程选择。
系统级性能优化是在编译器、数据布局、并发架构三个层面做出的选择。本文按编译器内建函数、编译期多态替代虚函数、零堆分配热路径、缓存友好布局、无锁并发、Active Object 去锁化、行为树并行启动、实时调度八个方向,结合 newosp 基础库的代码,给出可落地的嵌入式 C/C++ 优化实践。
基于 C++14 实现一个带超时管理的线程安全消息总线,解决回调内重入死锁、线程安全订阅管理等工程问题。通过压力测试暴露 mutex + std::function + std::map 方案在多线程高频场景下的性能瓶颈,为后续引入 Lock-free MPSC 方案提供数据支撑。
std::shared_ptr 和 std::weak_ptr 在实时系统里会引入原子引用计数、堆碎片化和竞态风险。本文从一个 weak_ptr 竞态 bug 出发拆解五个陷阱,并给出 newosp 的零堆分配替代路径。
传统设计模式依赖虚函数和动态分配,在嵌入式系统中代价偏高。本文以 newosp 真实代码为例,给出 8 种编译期替代手法,覆盖类型擦除、RAII、编译期分发、Tag Dispatch、强类型包装、零堆 Pub/Sub、Visitor 与 CRTP。
结合 MISRA C++ 规范和 newosp 工程实践,说明如何用 C++17 模板做编译期分发,在保留代码灵活性的同时去掉虚函数的分发开销。文中数据来自实测:编译期分发比回调模式快 15 倍,比虚函数分发开销低 95% 以上。
在没有面向对象语法的 C 语言中,策略模式和状态模式都通过函数指针表 (vtable) 模拟多态,代码结构几乎一致。本文从设计意图出发,用通用示例 (传感器滤波、通信协议状态机) 剖析二者的本质差异,并展示它们在同一系统中的协作方式。
以 state_machine 框架的重构为案例,展示如何将一个过程驱动的 C 语言状态机改造为数据驱动的层次状态机 (HSM)。涵盖转换表替代 switch-case、LCA 算法消除递归、用户缓冲区替代内部分配、守卫条件与内外转换区分等关键改造点,附完整数据结构和 API 设计。
以激光雷达点云流水线为主线,展示 newosp C++17 事件驱动架构如何解决工业传感器系统的三个问题: 零堆分配消息传递 (CAS 无锁 MPSC + variant 值语义)、可建模的状态管理 (层次状态机 LCA + Guard)、微秒级确定性调度。