From a4b10e3c7872d2e8982e0abd63091d74c20908da Mon Sep 17 00:00:00 2001 From: Aleksandr Emelin Date: Sat, 21 Sep 2019 18:42:11 +0300 Subject: [PATCH 1/2] do not use cached PreparedMessage in broadcast benchmarks --- conn_broadcast_test.go | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/conn_broadcast_test.go b/conn_broadcast_test.go index cb88cbb0..d440fe77 100644 --- a/conn_broadcast_test.go +++ b/conn_broadcast_test.go @@ -18,7 +18,6 @@ import ( // scenarios with many subscribers in one channel. type broadcastBench struct { w io.Writer - message *broadcastMessage closeCh chan struct{} doneCh chan struct{} count int32 @@ -52,14 +51,6 @@ func newBroadcastBench(usePrepared, compression bool) *broadcastBench { usePrepared: usePrepared, compression: compression, } - msg := &broadcastMessage{ - payload: textMessages(1)[0], - } - if usePrepared { - pm, _ := NewPreparedMessage(TextMessage, msg.payload) - msg.prepared = pm - } - bench.message = msg bench.makeConns(10000) return bench } @@ -78,7 +69,7 @@ func (b *broadcastBench) makeConns(numConns int) { for { select { case msg := <-c.msgCh: - if b.usePrepared { + if msg.prepared != nil { c.conn.WritePreparedMessage(msg.prepared) } else { c.conn.WriteMessage(TextMessage, msg.payload) @@ -100,9 +91,9 @@ func (b *broadcastBench) close() { close(b.closeCh) } -func (b *broadcastBench) runOnce() { +func (b *broadcastBench) runOnce(msg *broadcastMessage) { for _, c := range b.conns { - c.msgCh <- b.message + c.msgCh <- msg } <-b.doneCh } @@ -114,17 +105,25 @@ func BenchmarkBroadcast(b *testing.B) { compression bool }{ {"NoCompression", false, false}, - {"WithCompression", false, true}, + {"Compression", false, true}, {"NoCompressionPrepared", true, false}, - {"WithCompressionPrepared", true, true}, + {"CompressionPrepared", true, true}, } + payload := textMessages(1)[0] for _, bm := range benchmarks { b.Run(bm.name, func(b *testing.B) { bench := newBroadcastBench(bm.usePrepared, bm.compression) defer bench.close() b.ResetTimer() for i := 0; i < b.N; i++ { - bench.runOnce() + message := &broadcastMessage{ + payload: payload, + } + if bench.usePrepared { + pm, _ := NewPreparedMessage(TextMessage, message.payload) + message.prepared = pm + } + bench.runOnce(message) } b.ReportAllocs() }) From 8c21f58dc105272a26948c521cf36b55e14c645d Mon Sep 17 00:00:00 2001 From: Aleksandr Emelin Date: Sat, 21 Sep 2019 18:57:07 +0300 Subject: [PATCH 2/2] pick better name for benchmark method --- conn_broadcast_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conn_broadcast_test.go b/conn_broadcast_test.go index d440fe77..6e744fc1 100644 --- a/conn_broadcast_test.go +++ b/conn_broadcast_test.go @@ -91,7 +91,7 @@ func (b *broadcastBench) close() { close(b.closeCh) } -func (b *broadcastBench) runOnce(msg *broadcastMessage) { +func (b *broadcastBench) broadcastOnce(msg *broadcastMessage) { for _, c := range b.conns { c.msgCh <- msg } @@ -123,7 +123,7 @@ func BenchmarkBroadcast(b *testing.B) { pm, _ := NewPreparedMessage(TextMessage, message.payload) message.prepared = pm } - bench.runOnce(message) + bench.broadcastOnce(message) } b.ReportAllocs() })