所谓读写缓冲池的本质是生产者消费者模型的实际应用。目的是为了避免频繁分配和释放内存,复用最初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 {  |