diff options
| author | 2021-08-12 21:03:24 +0200 | |
|---|---|---|
| committer | 2021-08-12 21:03:24 +0200 | |
| commit | 98263a7de64269898a2f81207e38943b5c8e8653 (patch) | |
| tree | 743c90f109a6c5d27832d1dcef2388d939f0f77a /vendor/github.com/vmihailenco/bufpool/README.md | |
| parent | Text duplication fix (#137) (diff) | |
| download | gotosocial-98263a7de64269898a2f81207e38943b5c8e8653.tar.xz | |
Grand test fixup (#138)
* start fixing up tests
* fix up tests + automate with drone
* fiddle with linting
* messing about with drone.yml
* some more fiddling
* hmmm
* add cache
* add vendor directory
* verbose
* ci updates
* update some little things
* update sig
Diffstat (limited to 'vendor/github.com/vmihailenco/bufpool/README.md')
| -rw-r--r-- | vendor/github.com/vmihailenco/bufpool/README.md | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/vendor/github.com/vmihailenco/bufpool/README.md b/vendor/github.com/vmihailenco/bufpool/README.md new file mode 100644 index 000000000..05a70791c --- /dev/null +++ b/vendor/github.com/vmihailenco/bufpool/README.md @@ -0,0 +1,74 @@ +# bufpool + +[](https://travis-ci.org/vmihailenco/bufpool) +[](https://godoc.org/github.com/vmihailenco/bufpool) + +bufpool is an implementation of a pool of byte buffers with anti-memory-waste protection. It is based on the code and ideas from these 2 projects: +- https://github.com/libp2p/go-buffer-pool +- https://github.com/valyala/bytebufferpool + +bufpool consists of global pool of buffers that have a capacity of a power of 2 starting from 64 bytes to 32 megabytes. It also provides individual pools that maintain usage stats to provide buffers of the size that satisfies 95% of the calls. Global pool is used to reuse buffers between different parts of the app. + +# Installation + +``` go +go get github.com/vmihailenco/bufpool +``` + +# Usage + +bufpool can be used as a replacement for `sync.Pool`: + +``` go +var jsonPool bufpool.Pool // basically sync.Pool with usage stats + +func writeJSON(w io.Writer, obj interface{}) error { + buf := jsonPool.Get() + defer jsonPool.Put(buf) + + if err := json.NewEncoder(buf).Encode(obj); err != nil { + return err + } + + _, err := w.Write(buf.Bytes()) + return err +} +``` + +or to allocate buffer of the given size: + +``` go +func writeHex(w io.Writer, data []byte) error { + n := hex.EncodedLen(len(data))) + + buf := bufpool.Get(n) // buf.Len() is guaranteed to equal n + defer bufpool.Put(buf) + + tmp := buf.Bytes() + hex.Encode(tmp, data) + + _, err := w.Write(tmp) + return err +} +``` + +If you need to append data to the buffer you can use following pattern: + +``` go +buf := bufpool.Get(n) +defer bufpool.Put(buf) + +bb := buf.Bytes()[:0] + +bb = append(bb, ...) + +buf.ResetBuf(bb) +``` + +You can also change default pool thresholds: + +``` go +var jsonPool = bufpool.Pool{ + ServePctile: 0.95, // serve p95 buffers +} +``` |
