Skip to content

Commit 88ef50a

Browse files
author
Oren (electricessence)
committed
Updates.
1 parent 5019273 commit 88ef50a

17 files changed

Lines changed: 489 additions & 391 deletions

benchmarking/Benchmark.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,18 @@ protected override IEnumerable<TimedResult> TestOnceInternal()
3131
Parallel.For(0, TestSize, i => pool.Give(_items[i]));
3232
});
3333

34-
yield return TimedResult.Measure("Mixed Read/Write (In Parallel)", () =>
34+
yield return TimedResult.Measure("Mixed 90%-Take/10%-Give (In Parallel)", () =>
35+
{
36+
Parallel.For(0, TestSize, i =>
37+
{
38+
if (i % 10 == 0)
39+
pool.Give(_items[i]);
40+
else
41+
_items[i] = pool.Take();
42+
});
43+
});
44+
45+
yield return TimedResult.Measure("Mixed 50%-Take/50%-Give (In Parallel)", () =>
3546
{
3647
Parallel.For(0, TestSize, i =>
3748
{
@@ -42,6 +53,17 @@ protected override IEnumerable<TimedResult> TestOnceInternal()
4253
});
4354
});
4455

56+
yield return TimedResult.Measure("Mixed 10%-Take/90%-Give (In Parallel)", () =>
57+
{
58+
Parallel.For(0, TestSize, i =>
59+
{
60+
if (i % 10 == 0)
61+
_items[i] = pool.Take();
62+
else
63+
pool.Give(_items[i]);
64+
});
65+
});
66+
4567
yield return TimedResult.Measure("Empty Pool (.TryTake())", () =>
4668
{
4769
while (pool.TryTake() != null)

benchmarking/BenchmarkResult.csv

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,29 @@
1-
Batch,Pool Type," From Empty (In Parallel)"," To (In Parallel)",d Read/Write (In Parallel),y Pool (.TryTake()),L,
2-
Repeat 400000 for size 4,QueueObjectPool,00:00:03.1829368,00:00:02.8245204,00:00:02.7274550,00:00:00.4644069,00:00:09.1993191,
3-
Repeat 400000 for size 4,ConcurrentQueueObjectPool,00:00:03.9520475,00:00:03.3141114,00:00:03.2446456,00:00:00.5033748,00:00:11.0141793,
4-
Repeat 400000 for size 4,ConcurrentStackObjectPool,00:00:03.7274029,00:00:03.4699671,00:00:03.1910788,00:00:00.4871689,00:00:10.8756177,
5-
Repeat 400000 for size 4,OptimisticArrayObjectPool,00:00:03.1819627,00:00:02.6187847,00:00:02.5613898,00:00:00.5260779,00:00:08.8882151,
6-
Repeat 160000 for size 10,QueueObjectPool,00:00:00.9753926,00:00:00.9346630,00:00:00.8060045,00:00:00.2545299,00:00:02.9705900,
7-
Repeat 160000 for size 10,ConcurrentQueueObjectPool,00:00:01.0289733,00:00:00.8683338,00:00:00.8201646,00:00:00.2358702,00:00:02.9533419,
8-
Repeat 160000 for size 10,ConcurrentStackObjectPool,00:00:01.0970613,00:00:01.0251371,00:00:00.8980626,00:00:00.2443304,00:00:03.2645914,
9-
Repeat 160000 for size 10,OptimisticArrayObjectPool,00:00:01.1247373,00:00:00.9535141,00:00:00.8851396,00:00:00.4598056,00:00:03.4231966,
10-
Repeat 48000 for size 50,QueueObjectPool,00:00:00.5223797,00:00:00.8268179,00:00:00.5445827,00:00:00.3488348,00:00:02.2426151,
11-
Repeat 48000 for size 50,ConcurrentQueueObjectPool,00:00:00.5395239,00:00:00.9860749,00:00:00.4412272,00:00:00.3090006,00:00:02.2758266,
12-
Repeat 48000 for size 50,ConcurrentStackObjectPool,00:00:00.5258119,00:00:00.5466085,00:00:00.4650011,00:00:00.3059624,00:00:01.8433839,
13-
Repeat 48000 for size 50,OptimisticArrayObjectPool,00:00:00.5831005,00:00:00.7148946,00:00:00.4330670,00:00:01.7100735,00:00:03.4411356,
14-
Repeat 32000 for size 100,QueueObjectPool,00:00:00.5055389,00:00:00.9263350,00:00:00.5684372,00:00:00.4567166,00:00:02.4570277,
15-
Repeat 32000 for size 100,ConcurrentQueueObjectPool,00:00:00.5348503,00:00:00.7617627,00:00:00.4222624,00:00:00.4125298,00:00:02.1314052,
16-
Repeat 32000 for size 100,ConcurrentStackObjectPool,00:00:00.5154681,00:00:00.5769678,00:00:00.4597205,00:00:00.4073109,00:00:01.9594673,
17-
Repeat 32000 for size 100,OptimisticArrayObjectPool,00:00:00.7254637,00:00:01.0581905,00:00:00.3984681,00:00:03.7309017,00:00:05.9130240,
18-
Repeat 51200 for size 250,QueueObjectPool,00:00:01.5711793,00:00:03.1183660,00:00:02.1775394,00:00:01.7555068,00:00:08.6225915,
19-
Repeat 51200 for size 250,ConcurrentQueueObjectPool,00:00:02.0386582,00:00:02.5414010,00:00:01.4334623,00:00:01.7010927,00:00:07.7146142,
20-
Repeat 51200 for size 250,ConcurrentStackObjectPool,00:00:01.8341826,00:00:02.0561458,00:00:01.4740427,00:00:01.6809933,00:00:07.0453644,
21-
Repeat 51200 for size 250,OptimisticArrayObjectPool,00:00:02.7181693,00:00:06.9277528,00:00:01.1086113,00:00:25.9591372,00:00:36.7136706,
22-
0,QueueObjectPool,00:00:01.6247132,00:00:05.7028204,00:00:06.3495433,00:00:01.7208433,00:00:15.3979202,
23-
Repeat 51200 for size 250,ChannelObjectPool,00:00:09.1002442,00:00:09.5148632,00:00:07.0393499,00:00:01.9543981,00:00:27.6088554,
24-
Repeat 51200 for size 250,ConcurrentQueueObjectPool,00:00:01.3937964,00:00:03.7235199,00:00:01.2171737,00:00:01.5041405,00:00:07.8386305,
25-
Repeat 51200 for size 250,ConcurrentStackObjectPool,00:00:01.4858700,00:00:01.8964279,00:00:02.2896336,00:00:01.4461137,00:00:07.1180452,
26-
Repeat 51200 for size 250,OptimisticArrayObjectPool,00:00:02.9579032,00:00:07.0305663,00:00:01.2993861,00:00:27.8503246,00:00:39.1381802,
27-
at 25600 for size 250,StackObjectPool,00:00:00.7604847,00:00:01.8116364,00:00:01.2369652,00:00:00.8626937,00:00:04.6717800,
28-
Repeat 25600 for size 250,ConcurrentQueueObjectPool,00:00:00.8566894,00:00:00.9466838,00:00:00.7795225,00:00:01.1284017,00:00:03.7112974,
29-
Repeat 25600 for size 250,ConcurrentStackObjectPool,00:00:00.7723668,00:00:01.5778130,00:00:01.6054224,00:00:01.7977731,00:00:05.7533753,
30-
Repeat 25600 for size 250,OptimisticArrayObjectPool,00:00:01.2503504,00:00:03.2370044,00:00:00.5303349,00:00:11.9466373,00:00:16.9643270,
31-
Repeat 25600 for size 250,InterlockedArrayObjectPool,00:00:01.2508355,00:00:06.3817155,00:00:00.8393488,00:00:14.9549267,00:00:23.4268265,
32-
Repeat 14400 for size 500,QueueObjectPool,00:00:00.7519294,00:00:01.5185357,00:00:01.3801529,00:00:00.8505885,00:00:04.5012065,
33-
Repeat 14400 for size 500,StackObjectPool,00:00:00.7628823,00:00:01.6182833,00:00:01.4624384,00:00:00.8960254,00:00:04.7396294,
1+
Batch,Pool Type," From Empty (In Parallel)"," To (In Parallel)",d 90%-Take/10%-Give (In Parallel),d 50%-Take/50%-Give (In Parallel),d 10%-Take/90%-Give (In Parallel),y Pool (.TryTake()),L,
2+
Repeat 800000 for size 4,ConcurrentQueueObjectPool,00:00:02.1768070,00:00:01.6760555,00:00:01.7056065,00:00:01.6512698,00:00:01.6459856,00:00:00.0942697,00:00:08.9499941,
3+
Repeat 800000 for size 4,ConcurrentStackObjectPool,00:00:02.0861011,00:00:01.9051266,00:00:01.7180590,00:00:01.6934710,00:00:01.8172521,00:00:00.0935848,00:00:09.3135946,
4+
Repeat 800000 for size 4,OptimisticArrayObjectPool,00:00:02.1028619,00:00:01.7289187,00:00:01.7391071,00:00:01.7308129,00:00:01.7911409,00:00:00.0850814,00:00:09.1779229,
5+
Repeat 320000 for size 10,ConcurrentQueueObjectPool,00:00:01.4097002,00:00:01.0808791,00:00:01.0795562,00:00:01.0359202,00:00:01.0900044,00:00:00.1022724,00:00:05.7983325,
6+
Repeat 320000 for size 10,ConcurrentStackObjectPool,00:00:01.3884640,00:00:01.2335304,00:00:01.0874214,00:00:01.0858229,00:00:01.1916481,00:00:00.1097261,00:00:06.0966129,
7+
Repeat 320000 for size 10,OptimisticArrayObjectPool,00:00:01.3395438,00:00:01.0630741,00:00:01.0581905,00:00:01.0257850,00:00:01.0596437,00:00:00.1231254,00:00:05.6693625,
8+
Repeat 96000 for size 50,ConcurrentQueueObjectPool,00:00:00.6724161,00:00:00.9303053,00:00:00.6667530,00:00:00.4869434,00:00:00.5629880,00:00:00.1474862,00:00:03.4668920,
9+
Repeat 96000 for size 50,ConcurrentStackObjectPool,00:00:00.6404036,00:00:00.7253187,00:00:00.5973183,00:00:00.5004547,00:00:00.6653687,00:00:00.1585221,00:00:03.2873861,
10+
Repeat 96000 for size 50,OptimisticArrayObjectPool,00:00:00.6273288,00:00:00.6296415,00:00:00.5758157,00:00:00.4575284,00:00:00.5484878,00:00:00.3576192,00:00:03.1964214,
11+
Repeat 64000 for size 100,ConcurrentQueueObjectPool,00:00:00.5739788,00:00:00.8879708,00:00:00.6868932,00:00:00.5038095,00:00:00.6414144,00:00:00.1906175,00:00:03.4846842,
12+
Repeat 64000 for size 100,ConcurrentStackObjectPool,00:00:00.5710317,00:00:00.8181417,00:00:02.3020598,00:00:00.5377935,00:00:00.7552635,00:00:00.2106115,00:00:05.1949017,
13+
Repeat 64000 for size 100,OptimisticArrayObjectPool,00:00:00.5741654,00:00:00.6708564,00:00:00.6465793,00:00:00.4123009,00:00:00.5587647,00:00:00.5961525,00:00:03.4588192,
14+
Repeat 51200 for size 250,ConcurrentQueueObjectPool,00:00:00.7338318,00:00:02.7582430,00:00:01.3118591,00:00:00.8866236,00:00:01.2641219,00:00:00.3621620,00:00:07.3168414,
15+
Repeat 51200 for size 250,ConcurrentStackObjectPool,00:00:00.7063932,00:00:01.4843162,00:00:04.0788532,00:00:01.6259396,00:00:01.3564185,00:00:00.4047656,00:00:09.6566863,
16+
Repeat 51200 for size 250,OptimisticArrayObjectPool,00:00:00.7798597,00:00:01.3369029,00:00:01.3656621,00:00:00.6762451,00:00:01.0179464,00:00:01.8689033,00:00:07.0455195,
17+
Repeat 12800 for size 2000,ConcurrentQueueObjectPool,00:00:00.7690881,00:00:02.9469849,00:00:02.0202982,00:00:01.3725082,00:00:02.1013278,00:00:00.6418618,00:00:09.8520690,
18+
Repeat 12800 for size 2000,ConcurrentStackObjectPool,00:00:00.6845217,00:00:02.5773779,00:00:04.7847969,00:00:04.7546912,00:00:03.4618654,00:00:00.6506477,00:00:16.9139008,
19+
Repeat 12800 for size 2000,OptimisticArrayObjectPool,00:00:00.7170882,00:00:07.3855602,00:00:07.4918848,00:00:01.1312204,00:00:04.8420972,00:00:13.1760797,00:00:34.7439305,
20+
epeat 51200 for size 250,OptimisticArrayObjectPool,00:00:00.7651948,00:00:01.3195712,00:00:01.3758641,00:00:00.6837150,00:00:01.0134658,00:00:01.9616149,00:00:07.1194258,
21+
Repeat 51200 for size 250,InterlockedArrayObjectPool,00:00:00.8386708,00:00:02.2800174,00:00:01.4244575,00:00:00.6435472,00:00:01.6845873,00:00:05.4327218,00:00:12.3040020,
22+
Repeat 12800 for size 2000,ConcurrentQueueObjectPool,00:00:00.7692018,00:00:03.0317303,00:00:02.0615927,00:00:01.3597065,00:00:02.0767858,00:00:00.6488593,00:00:09.9478764,
23+
Repeat 12800 for size 2000,ConcurrentStackObjectPool,00:00:00.6708805,00:00:02.5628201,00:00:04.7978301,00:00:04.7563902,00:00:03.4723738,00:00:00.6475781,00:00:16.9078728,
24+
Repeat 12800 for size 2000,OptimisticArrayObjectPool,00:00:00.7184635,00:00:07.2485577,00:00:07.4304114,00:00:01.1244839,00:00:04.7572699,00:00:15.8850338,00:00:37.1642202,
25+
Repeat 12800 for size 2000,InterlockedArrayObjectPool,00:00:01.2202062,00:00:19.5837353,00:00:08.9766760,00:00:01.0202604,00:00:12.8356061,00:01:23.7957059,00:02:07.4321899,
26+
0:00:00.7628823,00:00:01.6182833,00:00:01.4624384,00:00:00.8960254,00:00:04.7396294,
3427
Repeat 14400 for size 500,ConcurrentQueueObjectPool,00:00:00.8285180,00:00:00.9902911,00:00:00.8006946,00:00:01.1172107,00:00:03.7367144,
3528
Repeat 14400 for size 500,ConcurrentStackObjectPool,00:00:00.6978419,00:00:02.2585037,00:00:02.4760289,00:00:02.8394301,00:00:08.2718046,
3629
Repeat 14400 for size 500,OptimisticArrayObjectPool,00:00:01.0721065,00:00:05.6089585,00:00:00.5478712,00:00:22.2804453,00:00:29.5093815,

0 commit comments

Comments
 (0)