所谓读写缓冲池的本质是生产者消费者模型的实际应用。目的是为了避免频繁分配和释放内存,复用最初new出来的固定数目缓冲slice,减少GC压力。
Channel+WaitGroup
Golang并发基本都是这两者搭配使用,通过for+select循环监听发布事件、订阅事件、取消事件。
AsyncReader
数据结构
1 | // 接口核心方法Begin和Next, Begin用于写数据到blockBuf,Next从blockBuf读取出来数据 |
核心函数
1 | func NewAsyncReader(reader io.Reader, blockSize uint32, blockNum uint32, logId uint32) *asyncReader { |
BufferPool
读写缓冲池,Bodybufs是缓冲区,多个slice
数据结构
1 | type BufferPool interface { |
核心函数
1 | func (bp *BufferPoolImp) Write(start []byte, length int, err error) BosErrorCodeType { |