Merge pull request #20408 from cpuguy83/use_pool_for_pubsub_wg

Use pool for pubsub `Publish`'s waitgroups
This commit is contained in:
David Calavera 2016-02-17 14:46:13 -08:00
commit 1197aed664

View file

@ -5,6 +5,8 @@ import (
"time" "time"
) )
var wgPool = sync.Pool{New: func() interface{} { return new(sync.WaitGroup) }}
// NewPublisher creates a new pub/sub publisher to broadcast messages. // NewPublisher creates a new pub/sub publisher to broadcast messages.
// The duration is used as the send timeout as to not block the publisher publishing // The duration is used as the send timeout as to not block the publisher publishing
// messages to other clients if one client is slow or unresponsive. // messages to other clients if one client is slow or unresponsive.
@ -69,12 +71,13 @@ func (p *Publisher) Publish(v interface{}) {
return return
} }
wg := new(sync.WaitGroup) wg := wgPool.Get().(*sync.WaitGroup)
for sub, topic := range p.subscribers { for sub, topic := range p.subscribers {
wg.Add(1) wg.Add(1)
go p.sendTopic(sub, topic, v, wg) go p.sendTopic(sub, topic, v, wg)
} }
wg.Wait() wg.Wait()
wgPool.Put(wg)
p.m.RUnlock() p.m.RUnlock()
} }