-
Notifications
You must be signed in to change notification settings - Fork 32
/
fifo_queue_benchmark_test.go
151 lines (127 loc) · 3.02 KB
/
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
141
142
143
144
145
146
147
148
149
150
151
package goconcurrentqueue
import (
"testing"
)
// ***************************************************************************************
// ** Enqueue
// ***************************************************************************************
// single goroutine - enqueue 1 element
func BenchmarkFIFOEnqueueSingleGR(b *testing.B) {
fifo := NewFIFO()
for i := 0; i < b.N; i++ {
fifo.Enqueue(i)
}
}
// single goroutine - enqueue 100 elements
func BenchmarkFIFOEnqueue100SingleGR(b *testing.B) {
fifo := NewFIFO()
for i := 0; i < b.N; i++ {
for c := 0; c < 100; c++ {
fifo.Enqueue(c)
}
}
}
// multiple goroutines - enqueue 100 elements per gr
func BenchmarkFIFOEnqueue100MultipleGRs(b *testing.B) {
fifo := NewFIFO()
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 BenchmarkFIFOEnqueue1000MultipleGRs(b *testing.B) {
fifo := NewFIFO()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
for c := 0; c < 1000; c++ {
fifo.Enqueue(c)
}
}
})
}
// single goroutine - enqueue 1000 elements
func BenchmarkFIFOEnqueue1000SingleGR(b *testing.B) {
fifo := NewFIFO()
for i := 0; i < b.N; i++ {
for c := 0; c < 1000; c++ {
fifo.Enqueue(c)
}
}
}
// ***************************************************************************************
// ** Dequeue
// ***************************************************************************************
// single goroutine - dequeue 100 elements
func BenchmarkFIFODequeue100SingleGR(b *testing.B) {
// do not measure the queue initialization
b.StopTimer()
fifo := NewFIFO()
for i := 0; i < b.N; i++ {
// do not measure the enqueueing process
b.StopTimer()
for i := 0; i < 100; i++ {
fifo.Enqueue(i)
}
// measure the dequeueing process
b.StartTimer()
for i := 0; i < 100; i++ {
fifo.Dequeue()
}
}
}
// single goroutine 1000 - dequeue 1000 elements
func BenchmarkFIFODequeue1000SingleGR(b *testing.B) {
// do not measure the queue initialization
b.StopTimer()
fifo := NewFIFO()
for i := 0; i < b.N; i++ {
// do not measure the enqueueing process
b.StopTimer()
for i := 0; i < 1000; i++ {
fifo.Enqueue(i)
}
// measure the dequeueing process
b.StartTimer()
for i := 0; i < 1000; i++ {
fifo.Dequeue()
}
}
}
// multiple goroutines - dequeue 100 elements per gr
func BenchmarkFIFODequeue100MultipleGRs(b *testing.B) {
b.StopTimer()
fifo := NewFIFO()
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 BenchmarkFIFODequeue1000MultipleGRs(b *testing.B) {
b.StopTimer()
fifo := NewFIFO()
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()
}
}
})
}