thousandsofthem

thousandsofthem

Comparing Languages for Engineering Server Software: Erlang, Go, and Scala/Akka [pdf]

Comparing Languages for Engineering Server
Software: Erlang, Go, and Scala with Akka

Contains nice performance/throughput/latency comparison

Most Liked

benwilson512

benwilson512

Author of Craft GraphQL APIs in Elixir with Absinthe

As Chris mentioned elsewhere, Phoenix pubsub is the only one of the pubsub implementations tested that supports being distributed.

jeremyjh

jeremyjh

In my opinion this isn’t a fair comparison; these are not “processes” they are Futures. Scala’s monad comprehensions can make your Future code look sequential, but is not sequential, and you cannot use traditional IO libraries at all outside of a dedicated thread-pool or you will block your entire scheduler.

AstonJ

AstonJ

For those who can’t download PDFs at work etc, here’s the conclusion (I’ve highlighted mentions of Erlang):

Conclusion
We have investigated programming language characteristics that support the engineering of multicore web servers. Crucially these languages must be able to support massive concurrency on multi- core machines with low communication and synchronisation over- heads. We have analysed 12 languages considering computation, coordination, compilation, and popularity, and selected three rep- resentative high-level languages for detailed analysis: Erlang, Go, and Scala/Akka (Section 2). We have designed three server bench- marks that analyse key performance characteristics of the languages, i.e. inter-process communication latency, process creation time, the maximum number of supported processes, and throughput (Sec- tion 3).
A summary of the recommendations based on this small set of benchmarks is as follows. For a server where minimising message latency is crucial, Go and Erlang are the best choice (Figure 3). Interestingly Akka significantly reduces communication latency in Scala (Figures 3(a) and 3(b)). Scala/Akka are capable of maintaining the largest number of dormant processes (∼11M processes in Figure 4(a)), while Erlang performs the best when processes are short lived and the goal is to ensure minimal spawn time, e.g. Erlang takes 58s to spawn 9M processes (Section 4.2). In server applications where up to 100,000 processes are frequently spawned, Erlang and Go minimise process creation time and scale smoothly (Figure 4(b)). Experiments with communicating pairs of processes show that Go provides the highest throughput independent of the number of cores and the number of process pairs (Figure 5).
Comparing the performance of complete case study servers im- plemented in each language would significantly reinforce these results, and one possibility is an Instant Messaging (IM) bench- mark [4]. It would also be interesting to study the performance overheads of providing fault tolerance and of recovering from faults, another key server capability. Finally we could compare the perfor- mance of server languages on distributed memory architectures, e.g. a cluster of multicores.

Where Next?

Popular in Discussions Top

andre1sk
A big advantage to Elixir is all the distributed goodness but for many applications running on multiple nodes having integrated Etcd, Zoo...
New
blackode
Elixir Upgrading is so Simple in Ubuntu and It worked for me Ubuntu 16.04 git clone https://github.com/elixir-lang/elixir.git cd elixir...
New
Qqwy
Looking at the stacks that existing large companies have used, WhatsApp internally uses Mnesia to store the messages, while Discord uses ...
New
Fl4m3Ph03n1x
Background This question comes mainly from my ignorance. Today is Black Friday, one of my favorite days of the year to buy books. One boo...
New
arpan
Hello everyone :wave: Today I am very excited to announce a project that I have been working on for almost 3 months now. The project is...
New
AstonJ
Please see the new poll here: Which code editor or IDE do you use? (Poll) (2022 Edition) It’s been a while since we first asked this, I...
208 31142 143
New
tmbb
This is a post to discuss the new Phoenix LiveView functionality. From Chris’s talk, it appears that they generate all HTML on the serve...
342 18146 126
New
sergio
There’s a new TIOBE index report that came out that shows Elixir is still not in the top 50 used languages. It also goes on to call Elix...
New
restack_oslo
Hello, Please pardon me for any faux paux. I am 46 and this is my first time on a forum of any kind. I wanted to to get answers from tho...
New
jesse
Hi everyone, I hesitated to post this here because I don’t want you to think I’m spamming, but I’ve been working on a Platform-as-a-Serv...
New

Other popular topics Top

New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New
vegabook
I’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 52341 488
New
AstonJ
We’ve put together this wiki for Phoenix LiveView - please feel free to add any info you feel is worth including. What is Phoenix LiveV...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New

Latest on Elixir Forum

We're in Beta

About us Mission Statement