[erlang-questions] Cowboy (Erlang) VS Haskell (Warp)
Tue Jun 25 19:38:25 CEST 2013
Damian Dobroczyński <qoocku <at> gmail.com> writes:
> W dniu 25.06.2013 13:51, BM Kim pisze:
> > Hi folks,
> > First of all, I want to apologise for my poor english skills,
> > since english is not my first language, but I'll try my best
> > to formulate my quesions as clear as possible.
> > Second, I've just begun to learn erlang, so if I'm asking
> > obvious "noob" questions I apologise for that too in advance...
> > Anywho, now to my actual question:
> > I am planning to write a high-performance server application in erlang,
> > which will primarily handle HTTP requests. After some reseach with
> > I narrowed down my choices to cowboy, misultin and mochiweb and decided
> > to go with the cowboy library first...
> > Looking at some tutorials, I've quickly built a small server capable of
> > serving static files and was eager to see first benchmark-results...
> > I've also built a small Haskell server using Warp library to compare it
> > with erlang's cowboy...
> > But my first impression was, that my cowboy server is much much slower
> > expected when serving static-files and after some research I found a
> > of the cowboy's author claiming that cowboy shouldn't be used for
> > static-files. So I modified the server code, so that it replies to every
> > request with in-memory 4Kb binary blob and compared it with my haskell
> > server serving 4kb static file...
> > this is my simple cowboy's http handler:
> > ----------------------------------------------------------------------
> > blob() ->
> > [<<0:8>> || _ <- lists:seq(1,4096)].
> First, try to replace blob/0 function with this:
> blob() -> <<0:(4096*8)>>.
> Then, restart the test and report ;)
Thank you very much for pointing out the obvious mistake...
After correcting it, I got improvement from 5940 req/s to 8650 req/s...
But still much slower than the haskell warp-server, which has throughput
of 38000 req/s...
But I have another question regarding blob/0. Is it going to be evaluated
only once (like GHC would do) since it is a pure expression? I'm not
so sure, since erlang is not pure and any function can have side-effects
which you can't mark as with the IO monad in Haskell...
More information about the erlang-questions