I recently started to look at https://github.com/akkadotnet/akka.net and saw on Twitter a request for performance numbers on fast multi core maschines.<br>
Akka.NET is a port of the popular Akka framework on the JVM/Scala to .NET. It is following the idea of Erlang.
So I ran the tests on two of my workstations and servers.
2*Intel Xeon CPU E5-2630v2 @ 2.6 Ghz
Worker threads: 1023
OSVersion: Microsoft Windows NT 6.2.9200.0
ProcessorCount: 24
ClockSpeed: 2601 MHZ
Actor Count: 48
Throughput Setting, Messages/sec
1, 2356000 messages/s
5, 8982000 messages/s
10, 15251000 messages/s
15, 20394000 messages/s
20, 24057000 messages/s
30, 29585000 messages/s
40, 29615000 messages/s
50, 31914000 messages/s
60, 32467000 messages/s
70, 33936000 messages/s
80, 36407000 messages/s
90, 35169000 messages/s
100, 37174000 messages/s
200, 39164000 messages/s
300, 39318000 messages/s
400, 39318000 messages/s
500, 46728000 messages/s
600, 39682000 messages/s
700, 38961000 messages/s
800, 49099000 messages/s
900, 41841000 messages/s
Done..
1*Core I7 -3930k
C:\Users\Dell\Documents\GitHub\akka.net\Examples\PingPong\bin\Release>PingPong.e
xe
Worker threads: 1023
OSVersion: Microsoft Windows NT 6.1.7601 Service Pack 1
ProcessorCount: 12
ClockSpeed: 3201 MHZ
Actor Count: 24
Throughput Setting, Messages/sec
1, 3371000 messages/s
5, 18461000 messages/s
10, 24469000 messages/s
15, 26666000 messages/s
20, 27985000 messages/s
30, 36764000 messages/s
40, 38314000 messages/s
50, 39215000 messages/s
60, 40705000 messages/s
70, 36585000 messages/s
80, 41899000 messages/s
90, 41782000 messages/s
100, 43041000 messages/s
200, 43731000 messages/s
300, 44910000 messages/s
400, 38461000 messages/s
500, 43795000 messages/s
600, 38363000 messages/s
700, 45385000 messages/s
800, 46224000 messages/s
900, 45871000 messages/s
Done..
These numbers are quite impressive. I ran the test also on an older version first (zip on githup instead of a repo checkout) and the throughput had doubled between the old version.<br>
I have usually been a fan of staying as close to possible to the threading primitives of .NET/Windows to gain maximum control about performance. This leads to a combination of increased responsibility and increase number of implementation possibilities. Such numbers help me to get trust into using a library instead of trying to optimize everything on my own.<br>