
Show HN: Go Actor Model, fast distributed actors for Golang - RogerAlsing
https://github.com/rogeralsing/gam
======
RogerAlsing
Help wanted, There are a few easy to implement tasks here if anyone is
interested in getting involved.

[https://github.com/rogeralsing/gam/issues?q=is%3Aissue+is%3A...](https://github.com/rogeralsing/gam/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement)

------
nedsma
Totally cool. Alsing and Stannard did a great work on Akka.NET, and I'm happy
to see the OP making inroads into Golang projects. How does the message
throughput compare between GAM and Akka.NET?

I might as well start contributing to this project.

~~~
RogerAlsing
Akka.NET suffers from problems with the Helios transport right now, I don't
think the Helios transport do more than a few thousand messages per sec ATM.
That being said, there is a new transport coming in Akka.NET 1.5 where we do
100 000 messages per sec in our experiments, so that is a huge improvement.

But that is still more than 8 times slower than GAM.

The reason for Akka.NET (and JVM Akka) having trouble in this area is that
every message comes with a sender ActorRef that needs to be resolved. even if
the target doesn't touch that ActorRef. The serialization mechanism there is
also a lot more complicated.

~~~
Aaronontheweb
I've been wondering where you've been lately Roger :p

Releasing Helios 2.0 today, which is a big improvement over the previous
version.

Stress test results across 350 connections (ramped up over a 3-5 minutes, each
connection doing 250 msg / s):
[https://gist.github.com/Aaronontheweb/ab3ae953239de81752c357...](https://gist.github.com/Aaronontheweb/ab3ae953239de81752c357ccdb1a530a)

Also includes 1 million message throughput tests for duplex and inbound-only
receive. On the inbound side we peak out at about 250k / s on a single
connection. Write side is slower at the moment due to lack of batching on
flush, but that'll be fixed.

------
vanderZwan
So I have little real experience with Actor-based programming (although I'm
looking into Pony so that might change soon). Are there situations where it
would be elegant to _combine_ the two models? I'm aware of, for example,
GALS[0] but that isn't quite what differentiates the two approached to
concurrency, is it?

[https://en.wikipedia.org/wiki/Globally_asynchronous_locally_...](https://en.wikipedia.org/wiki/Globally_asynchronous_locally_synchronous)

------
didip
This is very exciting, thank you for building this.

Quick question on your sample codes, if actor is capable of receiving async
messages, then channel is basically redundant, right?

What is the use case on using both, it looks like I can consume messages
directly from the actor. I am not clear on that.

------
asfarley
I'll just leave this here

[http://asfarley.github.io/bashactors/](http://asfarley.github.io/bashactors/)

------
sagichmal
[https://github.com/rogeralsing/gam/blob/dev/build.bat](https://github.com/rogeralsing/gam/blob/dev/build.bat)

Wat

~~~
RogerAlsing
hehe that one shouldnt be checked in, it's just for me to see that proto
contracts hold between edits.

