在我们系统中有一个非常关键的地方:从网络中读取数据。
而这个地方有一个很显著的特征,即我们知道需要多长的 Buffer。所以针对这一点,我们可以设计这样一个 Buffer Pool:
- 整个 Buffer Pool 里面放着 4B, 8B 到 1KB 的 Buffer,注意这个过程并不是一定要按照 2 的幂来设计阶梯,而应该是考虑初始化的过程可以指定有哪些长度
- 当用户申请 Buffer 的时候,假设说用户要长度为 N 的 Buffer,那么就从池子里面拿出来一个超过 N 的最小的 Buffer。
- 归还 buffer 的时候,归还到对应大小的 Buffer 空闲队列里面。
而后,这里还要进一步考虑这些问题:
- 控制住整个Buffer的内存使用量,以防万一;
- 当队列很长的时候,应该要释放掉一些 Buffer;
此外,这个实现要尝试使用 arena 来实现。
在我们系统中有一个非常关键的地方:从网络中读取数据。
而这个地方有一个很显著的特征,即我们知道需要多长的 Buffer。所以针对这一点,我们可以设计这样一个 Buffer Pool:
而后,这里还要进一步考虑这些问题:
此外,这个实现要尝试使用 arena 来实现。