Skip to content

固定长度 Buffer Pool 设计与实现 #62

@flycash

Description

@flycash

在我们系统中有一个非常关键的地方:从网络中读取数据。

而这个地方有一个很显著的特征,即我们知道需要多长的 Buffer。所以针对这一点,我们可以设计这样一个 Buffer Pool:

  • 整个 Buffer Pool 里面放着 4B, 8B 到 1KB 的 Buffer,注意这个过程并不是一定要按照 2 的幂来设计阶梯,而应该是考虑初始化的过程可以指定有哪些长度
  • 当用户申请 Buffer 的时候,假设说用户要长度为 N 的 Buffer,那么就从池子里面拿出来一个超过 N 的最小的 Buffer。
  • 归还 buffer 的时候,归还到对应大小的 Buffer 空闲队列里面。

而后,这里还要进一步考虑这些问题:

  • 控制住整个Buffer的内存使用量,以防万一;
  • 当队列很长的时候,应该要释放掉一些 Buffer;

此外,这个实现要尝试使用 arena 来实现。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions