Add PipePool of different implementations
This commit is contained in:
parent
e298e4beb3
commit
562d62828d
31
pipe_pool.go
31
pipe_pool.go
|
@ -1,31 +1,6 @@
|
|||
package tcp
|
||||
|
||||
import "sync"
|
||||
|
||||
type pipePool struct {
|
||||
pool sync.Pool
|
||||
}
|
||||
|
||||
func newPipePool() pipePool {
|
||||
return pipePool{sync.Pool{
|
||||
New: func() interface{} {
|
||||
return make(chan error, 1)
|
||||
}},
|
||||
}
|
||||
}
|
||||
|
||||
func (p *pipePool) getPipe() chan error {
|
||||
return p.pool.Get().(chan error)
|
||||
}
|
||||
|
||||
func (p *pipePool) putBackPipe(pipe chan error) {
|
||||
p.cleanPipe(pipe)
|
||||
p.pool.Put(pipe)
|
||||
}
|
||||
|
||||
func (p *pipePool) cleanPipe(pipe chan error) {
|
||||
select {
|
||||
case <-pipe:
|
||||
default:
|
||||
}
|
||||
type pipePool interface {
|
||||
getPipe() chan error
|
||||
putBackPipe(chan error)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
package tcp
|
||||
|
||||
type pipePoolDummy struct{}
|
||||
|
||||
func newPipePoolDummy() *pipePoolDummy {
|
||||
return &pipePoolDummy{}
|
||||
}
|
||||
|
||||
func (*pipePoolDummy) getPipe() chan error {
|
||||
return make(chan error, 1)
|
||||
}
|
||||
|
||||
func (*pipePoolDummy) putBackPipe(pipe chan error) {}
|
|
@ -0,0 +1,31 @@
|
|||
package tcp
|
||||
|
||||
import "sync"
|
||||
|
||||
type pipePoolSyncPool struct {
|
||||
pool sync.Pool
|
||||
}
|
||||
|
||||
func newPipePoolSyncPool() *pipePoolSyncPool {
|
||||
return &pipePoolSyncPool{sync.Pool{
|
||||
New: func() interface{} {
|
||||
return make(chan error, 1)
|
||||
}},
|
||||
}
|
||||
}
|
||||
|
||||
func (p *pipePoolSyncPool) getPipe() chan error {
|
||||
return p.pool.Get().(chan error)
|
||||
}
|
||||
|
||||
func (p *pipePoolSyncPool) putBackPipe(pipe chan error) {
|
||||
p.cleanPipe(pipe)
|
||||
p.pool.Put(pipe)
|
||||
}
|
||||
|
||||
func (p *pipePoolSyncPool) cleanPipe(pipe chan error) {
|
||||
select {
|
||||
case <-pipe:
|
||||
default:
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue