实现 #
用于管理固定大小的字节切片([]byte
)。内存池的目的在于减少内存分配和垃圾回收的开销,通过重用已经分配的内存块来提高性能
package main
type MemoryPool chan []byte
// 从内存池中返回长度为8的字节切片,如果内存池中没有可用字节切片则新分配
func (l MemoryPool) Borrow() []byte {
var buf []byte
select {
case buf = <-l:
default:
buf = make([]byte, 8)
}
return buf[:8]
}
// 将字节切片放回内存池
func (l MemoryPool) Return(buf []byte) {
select {
case l <- buf:
default:
// 垃圾回收
}
}
func main() {
var mp MemoryPool = make(chan []byte, 1024)
sl := mp.Borrow()
mp.Return(sl)
}