Performance and Benchmarks
|Lib||Remote PingPong||Inproc PingPong||SkyNet|
|Proto.Actor Kotlin||~2 700 000 msg/sec||~160 000 000 msg/sec||~0.31 sec|
|Proto.Actor C#||~2 500 000 msg/sec||~125 000 000 msg/sec||~0.8 sec|
|Proto.Actor Go||~2 400 000 msg/sec||~120 000 000 msg/sec||~1.5 sec|
|Akka||?||~38 000 000 msg/sec||?|
|Akka.NET||~38 000 msg/sec||~30 000 000 msg/sec||~12 sec|
|Erlang||~200 000 msg/sc||~12 000 000 msg/sec||~0.75 sec|
This test uses two nodes and two actors, one on each node. The test then pass 1 mil messages from node 1 to node 2 and back again. There is no specific message size taken into account here, the message may be as small as your framework supports.
This test is similar to the remote pingpong, the difference is that there is a single node and there may be more than two actors, usually CPU-Count or CPU-Count * 2. Messages may or may not be serialized. Both Proto.Actor and Akka.NET supports passing messages by reference to optimize in-process performance.
Creates an actor (goroutine, whatever), which spawns 10 new actors, each of them spawns 10 more actors, etc. until one million actors are created on the final level. Then, each of them returns back its ordinal number (from 0 to 999999), which are summed on the previous level and sent back upstream, until reaching the root actor. (The answer should be 499999500000).