summaryrefslogtreecommitdiff
path: root/vendor/github.com/vmihailenco/bufpool/README.md
diff options
context:
space:
mode:
authorLibravatar Tobi Smethurst <31960611+tsmethurst@users.noreply.github.com>2021-08-12 21:03:24 +0200
committerLibravatar GitHub <noreply@github.com>2021-08-12 21:03:24 +0200
commit98263a7de64269898a2f81207e38943b5c8e8653 (patch)
tree743c90f109a6c5d27832d1dcef2388d939f0f77a /vendor/github.com/vmihailenco/bufpool/README.md
parentText duplication fix (#137) (diff)
downloadgotosocial-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.md74
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
+
+[![Build Status](https://travis-ci.org/vmihailenco/bufpool.svg)](https://travis-ci.org/vmihailenco/bufpool)
+[![GoDoc](https://godoc.org/github.com/vmihailenco/bufpool?status.svg)](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
+}
+```