阅读时间: 1 分钟

缓存池

固定原子缓存池实现

Table of Contents

什么是“固定原子缓存池”(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 大小固定,不适应极端多分辨率混合场景(可按最大分辨率分配或多级池)。

zooeywm
嗨! 我是 zooeywm

一名对新鲜事物永远怀有热情的咸鱼程序员~

欢迎光临我的赛博小窝! (:3[▓▓]

Arch Linux | Hyprland | neovim | Rust | 能用键盘不用鼠标

|


Content licenced under CC BY-NC-ND 4.0