D vs Go in real life, part 2. Also, Erlang.
qznc
qznc at web.de
Thu Dec 5 01:36:16 PST 2013
On Wednesday, 4 December 2013 at 12:49:13 UTC, Atila Neves wrote:
> It all started here:
>
> http://forum.dlang.org/thread/lmkvmfpysiokpqgsynar@forum.dlang.org
>
> Not wanting to be outdone, my buddy Jeff (the Go guy) went and
> wrote a new benchmark. My implementation didn't do as well on
> that one so I went back to the code and optimised it. Also, our
> other buddy Patrick from work decided to get in on this and use
> it as an excuse to learn Erlang. So now 4 different
> implementations in 4 different languages are duking it out.
>
> There are two benchmarks, both written in Go. The first is
> loadtest and it measures throughput. I varied the number of
> client connections to the server and measured how many messages
> were sent per second.
>
> The second benchmark is pingtest and it measures latency. The
> quantity I varied here was the number of wildcard subscribers
> (it'd take a while to explain what they are to anyone who isn't
> familiar with MQTT). It has a bunch of client connections talk
> to each other, and instead of trying to send as many messages
> as computerly possible they wait for the acknowledgement from
> the partner connection. The results are as follows (I tried
> making charts but LibreOffice wasn't helping and then I got
> bored), with the numbers being thousands of messages per second:
>
> loadtest
> Connections: 100 500 750 1k
> D + vibe.d: 121.7 +/- 1.5 166.9 +/- 1.5 171.1 +/- 3.3
> 167.9 +/- 1.3
> C (mosquitto): 106.1 +/- 0.8 122.4 +/- 0.4 95.2 +/- 1.3
> 74.7 +/- 0.4
> Erlang: 104.1 +/- 2.2 124.2 +/- 5.9 117.6 +/- 4.6
> 117.7 +/- 3.2
> Go: 90.9 +/- 11 100.1 +/- 0.1 99.3 +/- 0.2
> 98.8 +/- 0.3
>
> pingtest
> wsubs: 20 200 400
> D + vibe.d: 50.9 +/- 0.3 38.3 +/- 0.2 20.1 +/- 0.1
> C (mosquitto): 65.4 +/- 4.4 45.2 +/- 0.2 20.0 +/- 0.0
> Erlang: 49.1 +/- 0.8 30.9 +/- 0.3 15.6 +/- 0.1
> Go: 45.2 +/- 0.2 27.5 +/- 0.1 16.0 +/- 0.1
>
> So, D was faster than the other contenders by far in
> throughput, 2nd place losing to the C implementation on
> latency. I'm still not sure why that is. Profiling in this case
> is tricky. I'm pretty sure the profiler is still ticking away
> when a fiber yields - the top function is the one that reads
> from the network, which I can't do much about.
>
> GC was pretty much a non-issue, which I'm both surprised at and
> happy about. I allocated as much memory as I wanted at first,
> and by the time I tried to optmise memory usage by allocating
> less all I managed to eke out in performance terms was a paltry
> extra 8% or so.
>
> All in all though, so much for his "nothing is going to be
> faster than Go because this is what it's good at". If he'd
> measured it against mosquitto first and realised it was already
> losing to C I probably wouldn't have written an MQTT broker in
> D, so I guess that was a good thing. :)
>
> Atila
>
> P.S. vibe.d is awesome, although I wish it'd compile with ldc
> or gdc
Nice benchmark! :)
So, a DMD-compiled D program vs GCC-compiled (?) C program
fighting for latency? That might be a reason. Interesting we
still win with throughput.
The variance/standard deviation of pingtest-C-20 with 4.4 stands
out. What happens there?
More information about the Digitalmars-d
mailing list