什么是“固定原子缓存池”(Fixed atomic buffer pool)
定义(简述)
固定原子缓存池一般在解码渲染场景使用,就是在初始化阶段预分配固定数量(例如 3 到 5)且固定大小(例如每帧 WH4 字节)的内存缓冲区(buffer),并为每个缓冲区维护一个原子状态位(atomic flag/atomic int),用于无锁/原子地获取和释放缓冲区。缓冲区从池中获取时通过原子操作把状态从“空闲(0)”改为“占用(1)”,释放时把状态复原为“空闲(0)”。
目的
- 避免运行时频繁分配/释放大块内存(减少碎片、减少 malloc/free 竞争)。
- 保证多线程环境下获取/释放 buffer 的原子性、线程安全。
- 为生产者和消费者之间提供低延迟、零拷贝或最小拷贝的帧传递机制。
优点
- 低延迟:获取 buffer 用原子操作,通常是非常快的路径。
- 可预测的内存使用:固定数目的固定大小 buffer,内存上限可计算。
- 简单且易于实现:没有复杂的内存管理策略;适合实时流媒体场景。
- 与 std::shared_ptr 结合时,可透明地由接收方持有引用,生命周期自动管理,便于在渲染线程安全使用。
局限/注意点
- 固定数量存在容量限制:如果 pool 的 buffer 全被占用,需要策略(阻塞等待 / 丢帧 / 扩容)。
- 若需要跨进程共享,原子操作的语义与可移植性需谨慎(POSIX shm + 原子需要对齐且平台支持跨进程原子)。
- buffer 大小固定,不适应极端多分辨率混合场景(可按最大分辨率分配或多级池)。
Content licenced under CC BY-NC-ND 4.0