-
Notifications
You must be signed in to change notification settings - Fork 33
/
fixed_fifo_queue_benchmark_test.go
140 lines (117 loc) · 2.98 KB
/
fixed_fifo_queue_benchmark_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package goconcurrentqueue
import (
"testing"
)
// ***************************************************************************************
// ** Enqueue
// ***************************************************************************************
// single goroutine - enqueue 1 element
func BenchmarkFixedFIFOEnqueueSingleGR(b *testing.B) {
fifo := NewFixedFIFO(5)
for i := 0; i < b.N; i++ {
fifo.Enqueue(i)
}
}
// single goroutine - enqueue 100 elements
func BenchmarkFixedFIFOEnqueue100SingleGR(b *testing.B) {
fifo := NewFixedFIFO(100)
for i := 0; i < b.N; i++ {
for c := 0; c < 100; c++ {
fifo.Enqueue(c)
}
}
}
// single goroutine - enqueue 1000 elements
func BenchmarkFixedFIFOEnqueue1000SingleGR(b *testing.B) {
fifo := NewFixedFIFO(1000)
for i := 0; i < b.N; i++ {
for c := 0; c < 1000; c++ {
fifo.Enqueue(c)
}
}
}
// multiple goroutines - enqueue 100 elements per gr
func BenchmarkFixedFIFOEnqueue100MultipleGRs(b *testing.B) {
b.StopTimer()
fifo := NewFixedFIFO(5000000)
b.StartTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
for c := 0; c < 100; c++ {
fifo.Enqueue(c)
}
}
})
}
// multiple goroutines - enqueue 1000 elements per gr
func BenchmarkFixedFIFOEnqueue1000MultipleGRs(b *testing.B) {
b.StopTimer()
fifo := NewFixedFIFO(5000000)
b.StartTimer()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
for c := 0; c < 1000; c++ {
fifo.Enqueue(c)
}
}
})
}
// ***************************************************************************************
// ** Dequeue
// ***************************************************************************************
// _benchmarkFixedFIFODequeueNDingleGR is a helper for single GR dequeue
func _benchmarkFixedFIFODequeueNDingleGR(total int, b *testing.B) {
fifo := NewFixedFIFO(total)
for i := 0; i < b.N; i++ {
b.StopTimer()
for i := 0; i < total; i++ {
fifo.Enqueue(i)
}
b.StartTimer()
for c := 0; c < total; c++ {
fifo.Dequeue()
}
}
}
// single goroutine - dequeue 100 elements
func BenchmarkFixedFIFODequeue100SingleGR(b *testing.B) {
_benchmarkFixedFIFODequeueNDingleGR(100, b)
}
// single goroutine - dequeue 1000 elements
func BenchmarkFixedFIFODequeue1000SingleGR(b *testing.B) {
_benchmarkFixedFIFODequeueNDingleGR(1000, b)
}
// multiple goroutines - dequeue 100 elements per gr
func BenchmarkFixedFIFODequeue100MultipleGRs(b *testing.B) {
b.StopTimer()
fifo := NewFixedFIFO(5000000)
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
b.StopTimer()
for c := 0; c < 100; c++ {
fifo.Enqueue(c)
}
b.StartTimer()
for c := 0; c < 100; c++ {
fifo.Dequeue()
}
}
})
}
// multiple goroutines - dequeue 1000 elements per gr
func BenchmarkFixedFIFODequeue1000MultipleGRs(b *testing.B) {
b.StopTimer()
fifo := NewFixedFIFO(5000000)
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
b.StopTimer()
for c := 0; c < 1000; c++ {
fifo.Enqueue(c)
}
b.StartTimer()
for c := 0; c < 1000; c++ {
fifo.Dequeue()
}
}
})
}