https://github.com/liudanking/gmmpool
A multi level memory pool for Golang
https://github.com/liudanking/gmmpool
golang memory-pool multilevel
Last synced: about 2 months ago
JSON representation
A multi level memory pool for Golang
- Host: GitHub
- URL: https://github.com/liudanking/gmmpool
- Owner: liudanking
- Created: 2018-02-11T07:16:09.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2018-03-01T10:05:33.000Z (almost 8 years ago)
- Last Synced: 2024-09-22T09:12:33.753Z (over 1 year ago)
- Topics: golang, memory-pool, multilevel
- Language: Go
- Size: 4.88 KB
- Stars: 44
- Watchers: 3
- Forks: 11
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# gmmpool
A multi level memory pool for Golang:

The design thoughts are detailed in [golang multi-level memory pool design and implemention](https://liudanking.com/arch/golang-multi-level-memory-pool-design-implementation/)(in Chinese🇨🇳).
## Installation
`go get github.com/liudanking/gmmpool`
## Usage
```go
package main
import (
"bytes"
"log"
"github.com/liudanking/gmmpool"
)
func main() {
pool := gmmpool.NewMultiLevelPool([]gmmpool.PoolOpt{
gmmpool.PoolOpt{Num: 10, Size: 1024}, // level 0
gmmpool.PoolOpt{Num: 10, Size: 1024 * 2}, // level 1
})
buf := pool.Get(1025)
defer pool.Put(buf)
data, err := buf.ReadAll(bytes.NewReader(make([]byte, 8)))
if err != nil {
log.Fatal(err)
}
log.Print(data)
}
```
## Benchmark (compared with ioutil.ReadAll, x19 speed up)
```
BenchmarkStdReadAll-4 200000 5969 ns/op
BenchmarkMultiLevelPool-4 5000000 311 ns/op
```
## Credit
[goim](https://github.com/Terry-Mao/goim/)