From 54ac7579a7fad63b337baaa07afd015cf802e203 Mon Sep 17 00:00:00 2001 From: Tamir Duberstein Date: Sun, 6 Mar 2016 16:35:07 -0500 Subject: [PATCH] transport: skip the backlog if it's empty MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This provides a modest reduction in allocation count. Benchmarked using https://github.com/cockroachdb/rpc-bench: ``` name old time/op new time/op delta GRPCServeHTTP_1K-4 181µs ± 3% 178µs ± 2% ~ (p=0.310 n=5+5) GRPCServeHTTP_64K-4 1.31ms ± 4% 1.30ms ± 3% ~ (p=0.548 n=5+5) name old speed new speed delta GRPCServeHTTP_1K-4 11.3MB/s ± 3% 11.5MB/s ± 2% ~ (p=0.246 n=5+5) GRPCServeHTTP_64K-4 100MB/s ± 4% 100MB/s ± 2% ~ (p=0.548 n=5+5) name old alloc/op new alloc/op delta GRPCServeHTTP_1K-4 88.5kB ± 0% 88.5kB ± 0% -0.09% (p=0.008 n=5+5) GRPCServeHTTP_64K-4 801kB ± 0% 801kB ± 0% -0.05% (p=0.008 n=5+5) name old allocs/op new allocs/op delta GRPCServeHTTP_1K-4 167 ± 0% 162 ± 0% -2.99% (p=0.008 n=5+5) GRPCServeHTTP_64K-4 672 ± 0% 645 ± 0% -4.08% (p=0.008 n=5+5) ``` --- transport/transport.go | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/transport/transport.go b/transport/transport.go index 6eca1b3b4298..bfb628adc6b3 100644 --- a/transport/transport.go +++ b/transport/transport.go @@ -89,12 +89,14 @@ func newRecvBuffer() *recvBuffer { func (b *recvBuffer) put(r item) { b.mu.Lock() defer b.mu.Unlock() - b.backlog = append(b.backlog, r) - select { - case b.c <- b.backlog[0]: - b.backlog = b.backlog[1:] - default: + if len(b.backlog) == 0 { + select { + case b.c <- r: + return + default: + } } + b.backlog = append(b.backlog, r) } func (b *recvBuffer) load() {