@@ -6,6 +6,11 @@ import (
6
6
"testing"
7
7
)
8
8
9
+ type testMap interface {
10
+ Put (k , v int )
11
+ Get (k int ) (int , bool )
12
+ }
13
+
9
14
type LockMap struct {
10
15
m map [int ]int
11
16
lock sync.RWMutex
@@ -83,55 +88,75 @@ func BenchmarkLockMap_Read(b *testing.B) {
83
88
}
84
89
}
85
90
86
- func BenchmarkLRMap_Read_Write (b * testing.B ) {
87
- m := InitLRMap (1000000 )
88
-
91
+ func run (m testMap , reader int ) {
89
92
wg := sync.WaitGroup {}
90
93
91
- wg .Add (1 )
92
- go func () {
93
- for k := 0 ; k < b .N ; k ++ {
94
- m .Get (rand .Intn (10000 ))
95
- }
96
- wg .Done ()
97
- }()
94
+ for k := 0 ; k < reader ; k ++ {
95
+ wg .Add (1 )
96
+ go func () {
97
+ for i := 0 ; i < 100 ; i ++ {
98
+ m .Get (rand .Intn (10000 ))
99
+ }
100
+ wg .Done ()
101
+ }()
102
+ }
98
103
99
104
wg .Add (1 )
100
105
go func () {
101
- for k := 0 ; k < b . N / 10 ; k ++ {
106
+ for i := 0 ; i < 100 ; i ++ {
102
107
k := rand .Intn (10000 )
103
108
m .Put (k , k )
104
109
}
105
110
wg .Done ()
106
-
107
111
}()
108
112
109
113
wg .Wait ()
114
+ }
115
+
116
+ func BenchmarkLRMap_Read_Write_5_1 (b * testing.B ) {
117
+ m := InitLRMap (1000000 )
110
118
119
+ for i := 0 ; i < b .N ; i ++ {
120
+ run (m , 5 )
121
+ }
111
122
}
112
123
113
- func BenchmarkLockMap_Read_Write (b * testing.B ) {
124
+ func BenchmarkLockMap_Read_Write_5_1 (b * testing.B ) {
114
125
m := InitLockMap (1000000 )
115
126
116
- wg := sync.WaitGroup {}
127
+ for i := 0 ; i < b .N ; i ++ {
128
+ run (m , 5 )
129
+ }
130
+ }
117
131
118
- wg .Add (1 )
119
- go func () {
120
- for k := 0 ; k < b .N ; k ++ {
121
- m .Get (rand .Intn (10000 ))
122
- }
123
- wg .Done ()
124
- }()
132
+ func BenchmarkLRMap_Read_Write_10_1 (b * testing.B ) {
133
+ m := InitLRMap (1000000 )
125
134
126
- wg .Add (1 )
127
- go func () {
128
- for k := 0 ; k < b .N / 10 ; k ++ {
129
- k := rand .Intn (10000 )
130
- m .Put (k , k )
131
- }
132
- wg .Done ()
135
+ for i := 0 ; i < b .N ; i ++ {
136
+ run (m , 10 )
137
+ }
138
+ }
133
139
134
- }()
140
+ func BenchmarkLockMap_Read_Write_10_1 (b * testing.B ) {
141
+ m := InitLockMap (1000000 )
135
142
136
- wg .Wait ()
143
+ for i := 0 ; i < b .N ; i ++ {
144
+ run (m , 10 )
145
+ }
146
+ }
147
+
148
+ func BenchmarkLRMap_Read_Write_15_1 (b * testing.B ) {
149
+ m := InitLRMap (1000000 )
150
+
151
+ for i := 0 ; i < b .N ; i ++ {
152
+ run (m , 15 )
153
+ }
154
+ }
155
+
156
+ func BenchmarkLockMap_Read_Write_15_1 (b * testing.B ) {
157
+ m := InitLockMap (1000000 )
158
+
159
+ for i := 0 ; i < b .N ; i ++ {
160
+ run (m , 15 )
161
+ }
137
162
}
0 commit comments