diff options
author | Aliaksandr Valialkin <valyala@gmail.com> | 2016-03-30 20:34:07 +0300 |
---|---|---|
committer | Aliaksandr Valialkin <valyala@gmail.com> | 2016-03-30 20:34:07 +0300 |
commit | 57cbe65ddca26e80d80b67b0891025b1907c7ddd (patch) | |
tree | 2dba7f9b115332ccf758afb06810e6ee9de1b7bc /peripconn.go | |
parent | workerpool: limit the number of connections each worker may serve. This shoul... (diff) | |
download | fasthttp-57cbe65ddca26e80d80b67b0891025b1907c7ddd.tar.gz fasthttp-57cbe65ddca26e80d80b67b0891025b1907c7ddd.tar.bz2 fasthttp-57cbe65ddca26e80d80b67b0891025b1907c7ddd.zip |
scalability improvement: use per-server peripconn pool
Diffstat (limited to 'peripconn.go')
-rw-r--r-- | peripconn.go | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/peripconn.go b/peripconn.go index a8cb75e..afd2a92 100644 --- a/peripconn.go +++ b/peripconn.go @@ -7,6 +7,7 @@ import ( ) type perIPConnCounter struct { + pool sync.Pool lock sync.Mutex m map[uint32]int } @@ -45,25 +46,23 @@ type perIPConn struct { } func acquirePerIPConn(conn net.Conn, ip uint32, counter *perIPConnCounter) *perIPConn { - v := perIPConnPool.Get() + v := counter.pool.Get() if v == nil { - v = &perIPConn{} + v = &perIPConn{ + perIPConnCounter: counter, + } } c := v.(*perIPConn) c.Conn = conn c.ip = ip - c.perIPConnCounter = counter return c } func releasePerIPConn(c *perIPConn) { c.Conn = nil - c.perIPConnCounter = nil - perIPConnPool.Put(c) + c.perIPConnCounter.pool.Put(c) } -var perIPConnPool sync.Pool - func (c *perIPConn) Close() error { err := c.Conn.Close() c.perIPConnCounter.Unregister(c.ip) |