diff options
author | Gusted <williamzijl7@hotmail.com> | 2023-11-12 16:36:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-12 16:36:57 +0100 |
commit | 1834cecd7e1ad98a4affda5ce6fbc4ae01995de7 (patch) | |
tree | 75b53766e1732bf68cd8134158eea83c0ca38b28 /stackless | |
parent | Fix spelling mistake (diff) | |
download | fasthttp-1834cecd7e1ad98a4affda5ce6fbc4ae01995de7.tar.gz fasthttp-1834cecd7e1ad98a4affda5ce6fbc4ae01995de7.tar.bz2 fasthttp-1834cecd7e1ad98a4affda5ce6fbc4ae01995de7.zip |
Lazy load stackless functions (#1656)
- I noticed that fasthttp was taking up 1.8MB of heap memory, even
though it wasn't being used. This turned out to be the stackless
function: 1.80MB github.com/valyala/fasthttp/stackless.NewFunc
- Lazy load the stackless functions with sync.Once, given this a simple
atomic read, it shouldn't affect performance for the fast-path (I
haven't seen benchmarks with compression enabled).
Diffstat (limited to 'stackless')
-rw-r--r-- | stackless/writer.go | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/stackless/writer.go b/stackless/writer.go index b0d3e8d..347e464 100644 --- a/stackless/writer.go +++ b/stackless/writer.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "io" + "sync" "github.com/valyala/bytebufferpool" ) @@ -98,7 +99,17 @@ func (w *writer) do(op op) error { var errHighLoad = errors.New("cannot compress data due to high load") -var stacklessWriterFunc = NewFunc(writerFunc) +var ( + stacklessWriterFuncOnce sync.Once + stacklessWriterFuncFunc func(ctx interface{}) bool +) + +func stacklessWriterFunc(ctx interface{}) bool { + stacklessWriterFuncOnce.Do(func() { + stacklessWriterFuncFunc = NewFunc(writerFunc) + }) + return stacklessWriterFuncFunc(ctx) +} func writerFunc(ctx interface{}) { w := ctx.(*writer) |