@@ -66,38 +66,57 @@ Here are some timings for Python 2.7 for the following scenarios:
6666All four are benchmarked for the single threaded case and the multi threaded case
6767with 10 threads. I also tested it with 20 threads only to see that it then takes
6868about twice the time for both versions. Note also that the congested case is
69- substantially slower for both locks, so I only looped 1000x here to get useful
69+ substantially slower for both locks and the benchmark includes the thread
70+ creation time, so I only looped 1000x here to get useful
7071timings instead of 100000x for the single threaded case.
7172
7273::
7374
74- Testing threading.RLock (2.7)
75+ Testing _RLock (2.7.18 )
7576
7677 sequential (x100000):
77- lock_unlock : 1.408 sec
78- reentrant_lock_unlock : 1.089 sec
79- mixed_lock_unlock : 1.212 sec
80- lock_unlock_nonblocking : 1.415 sec
78+ lock_unlock : 853.55 msec
79+ reentrant_lock_unlock : 684.52 msec
80+ mixed_lock_unlock : 758.27 msec
81+ lock_unlock_nonblocking : 860.40 msec
82+ context_manager : 2876.00 msec
8183
8284 threaded 10T (x1000):
83- lock_unlock : 1.188 sec
84- reentrant_lock_unlock : 1.039 sec
85- mixed_lock_unlock : 1.068 sec
86- lock_unlock_nonblocking : 1.199 sec
85+ lock_unlock : 2210.69 msec
86+ reentrant_lock_unlock : 1864.38 msec
87+ mixed_lock_unlock : 1963.10 msec
88+ lock_unlock_nonblocking : 3709.91 msec
89+ context_manager : 2640.32 msec
8790
88- Testing FastRLock
91+ Testing FastRLock (0.8.1)
8992
9093 sequential (x100000):
91- lock_unlock : 0.122 sec
92- reentrant_lock_unlock : 0.124 sec
93- mixed_lock_unlock : 0.137 sec
94- lock_unlock_nonblocking : 0.156 sec
94+ lock_unlock : 139.76 msec
95+ reentrant_lock_unlock : 137.56 msec
96+ mixed_lock_unlock : 140.75 msec
97+ lock_unlock_nonblocking : 164.64 msec
98+ context_manager : 593.06 msec
9599
96100 threaded 10T (x1000):
97- lock_unlock : 0.911 sec
98- reentrant_lock_unlock : 0.938 sec
99- mixed_lock_unlock : 0.953 sec
100- lock_unlock_nonblocking : 0.916 sec
101+ lock_unlock : 1621.13 msec
102+ reentrant_lock_unlock : 1807.09 msec
103+ mixed_lock_unlock : 1834.21 msec
104+ lock_unlock_nonblocking : 1642.06 msec
105+ context_manager : 1730.29 msec
106+
107+ Testing Cython interface of FastRLock (0.8.1)
108+
109+ sequential (x100000):
110+ lock_unlock : 19.14 msec
111+ reentrant_lock_unlock : 19.12 msec
112+ mixed_lock_unlock : 16.81 msec
113+ lock_unlock_nonblocking : 14.49 msec
114+
115+ threaded 10T (x1000):
116+ lock_unlock : 1511.85 msec
117+ reentrant_lock_unlock : 1541.96 msec
118+ mixed_lock_unlock : 1585.70 msec
119+ lock_unlock_nonblocking : 1585.35 msec
101120
102121
103122How does it compare to Python 3.7 and later?
@@ -111,34 +130,48 @@ a C call instead.
111130
112131::
113132
114- Testing threading.RLock (3.9.7)
115-
116- sequential (x1000):
117- lock_unlock : 1.00 msec
118- reentrant_lock_unlock : 0.80 msec
119- mixed_lock_unlock : 0.88 msec
120- lock_unlock_nonblocking : 1.23 msec
121- context_manager : 5.29 msec
122-
123- threaded 10T (x100):
124- lock_unlock : 65.54 msec
125- reentrant_lock_unlock : 65.49 msec
126- mixed_lock_unlock : 86.61 msec
127- lock_unlock_nonblocking : 66.30 msec
128- context_manager : 84.27 msec
129-
130- Testing FastRLock (0.8)
131-
132- sequential (x1000):
133- lock_unlock : 0.60 msec
134- reentrant_lock_unlock : 0.53 msec
135- mixed_lock_unlock : 0.51 msec
136- lock_unlock_nonblocking : 0.54 msec
137- context_manager : 3.56 msec
138-
139- threaded 10T (x100):
140- lock_unlock : 63.64 msec
141- reentrant_lock_unlock : 69.93 msec
142- mixed_lock_unlock : 64.66 msec
143- lock_unlock_nonblocking : 69.28 msec
144- context_manager : 80.07 msec
133+ Testing RLock (3.10.1)
134+
135+ sequential (x100000):
136+ lock_unlock : 138.36 msec
137+ reentrant_lock_unlock : 95.35 msec
138+ mixed_lock_unlock : 102.05 msec
139+ lock_unlock_nonblocking : 131.44 msec
140+ context_manager : 616.83 msec
141+
142+ threaded 10T (x1000):
143+ lock_unlock : 1386.60 msec
144+ reentrant_lock_unlock : 1207.75 msec
145+ mixed_lock_unlock : 1319.62 msec
146+ lock_unlock_nonblocking : 1325.07 msec
147+ context_manager : 1357.93 msec
148+
149+ Testing FastRLock (0.8.1)
150+
151+ sequential (x100000):
152+ lock_unlock : 77.47 msec
153+ reentrant_lock_unlock : 64.14 msec
154+ mixed_lock_unlock : 73.51 msec
155+ lock_unlock_nonblocking : 70.31 msec
156+ context_manager : 393.34 msec
157+
158+ threaded 10T (x1000):
159+ lock_unlock : 1214.13 msec
160+ reentrant_lock_unlock : 1171.75 msec
161+ mixed_lock_unlock : 1184.33 msec
162+ lock_unlock_nonblocking : 1207.42 msec
163+ context_manager : 1232.20 msec
164+
165+ Testing Cython interface of FastRLock (0.8.1)
166+
167+ sequential (x100000):
168+ lock_unlock : 18.70 msec
169+ reentrant_lock_unlock : 15.88 msec
170+ mixed_lock_unlock : 14.96 msec
171+ lock_unlock_nonblocking : 13.47 msec
172+
173+ threaded 10T (x1000):
174+ lock_unlock : 1236.21 msec
175+ reentrant_lock_unlock : 1245.77 msec
176+ mixed_lock_unlock : 1194.25 msec
177+ lock_unlock_nonblocking : 1206.96 msec
0 commit comments