ringbuffer: eliminate idle load by using condition variables instead of sleeps

This commit is contained in:
aler9
2021-03-05 20:14:57 +01:00
parent 5f15e8e3b6
commit 0b43bd2f19
4 changed files with 61 additions and 5 deletions

View File

@@ -42,6 +42,22 @@ func TestPullBeforePush(t *testing.T) {
<-done
}
func TestClose(t *testing.T) {
r := New(1024)
done := make(chan struct{})
go func() {
defer close(done)
_, ok := r.Pull()
require.Equal(t, false, ok)
}()
time.Sleep(100 * time.Millisecond)
r.Close()
<-done
}
func BenchmarkPushPullContinuous(b *testing.B) {
r := New(1024 * 8)
defer r.Close()