mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-13 11:11:30 -04:00
Manually unlock the mutex in ClientMap.SendQueue.
Rather than use defer. It is only a tiny amount faster, but this function is frequently called. Before: $ go test -bench=BenchmarkSendQueue -benchtime=2s BenchmarkSendQueue-4 15901834 151 ns/op After: $ go test -bench=BenchmarkSendQueue -benchtime=2s BenchmarkSendQueue-4 15859948 147 ns/op https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake/-/issues/40177
This commit is contained in:
parent
8e5af50bdb
commit
64491466ce
2 changed files with 21 additions and 2 deletions
|
@ -57,8 +57,9 @@ func NewClientMap(timeout time.Duration) *ClientMap {
|
|||
// necessary.
|
||||
func (m *ClientMap) SendQueue(addr net.Addr) chan []byte {
|
||||
m.lock.Lock()
|
||||
defer m.lock.Unlock()
|
||||
return m.inner.SendQueue(addr, time.Now())
|
||||
queue := m.inner.SendQueue(addr, time.Now())
|
||||
m.lock.Unlock()
|
||||
return queue
|
||||
}
|
||||
|
||||
// clientMapInner is the inner type of ClientMap, implementing heap.Interface.
|
||||
|
|
18
common/turbotunnel/clientmap_test.go
Normal file
18
common/turbotunnel/clientmap_test.go
Normal file
|
@ -0,0 +1,18 @@
|
|||
package turbotunnel
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Benchmark the ClientMap.SendQueue function. This is mainly measuring the cost
|
||||
// of the mutex operations around the call to clientMapInner.SendQueue.
|
||||
func BenchmarkSendQueue(b *testing.B) {
|
||||
m := NewClientMap(1 * time.Hour)
|
||||
id := NewClientID()
|
||||
m.SendQueue(id) // populate the entry for id
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
m.SendQueue(id)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue