[erlang-questions] Cowboy (Erlang) VS Haskell (Warp)
Tue Jun 25 20:30:22 CEST 2013
On Jun 25, 2013, at 7:38 PM, BM Kim wrote:
> 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...
If you only care about performance use Haskell or c.
More information about the erlang-questions