[erlang-questions] Erlang port speed
Ulf Wiger
ulf.wiger@REDACTED
Sat May 30 14:51:20 CEST 2009
One major difference between the two approaches is
that your C program does a blocking read on the
port file descriptor, whereas the Erlang version is
non-blocking by default.
(If I mis-read your C program during my 10-second
scan, I apologize.)
BR,
Ulf W
----- "Patrick Mahoney" <pat@REDACTED> wrote:
> On Fri, May 29, 2009 at 12:04:46PM -0400, Colin Z wrote:
> >
> > Ping-ponging 1 million times takes about 160 seconds between Erlang
> and C# .
> > I'm benchmarking using the statistics module. I'm not doing any
> io:fwrites,
> > etc.
> >
> > Between the two C# processes it takes about 15 seconds.
> >
>
> I wrote a crummy benchmark that sends "ping" and "pong" back and
> forth
> under Linux using both a C program and an Erlang program to drive the
> same "simple_port.c" port. My Erlang program is much closer to C
> than
> your example, but is still about 30% slower for 1 million ping/pong.
>
> Here's the result with a C program controling "simple_port.c":
>
> $ time ./port_control
> ping/pong 1000000 times
>
> real 0m16.570s
> user 0m11.017s
> sys 0m5.188s
>
> And here's the result of an erlang program controlling
> "simple_port.c":
>
> Erlang R13A (erts-5.7) [source] [smp:2:2] [rq:2] [async-threads:0]
> [hipe] [kernel-poll:false]
>
> Eshell V5.7 (abort with ^G)
> 1> c(port_control).
> {ok,port_control}
> 2> port_control:test().
> ping/poing 1000000 times
> 20.681763s
> ok
> 3> port_control:test().
> ping/poing 1000000 times
> 21.058769s
> ok
>
> I don't have time to test on a win32 machine (and the C control
> program
> would have to to significantly changed to compile under win32;
> erts/emulator/sys/win32/sys.c might be helpful here).
>
> I recall a long time ago (unrelated to erlang) hearing about poor
> pipe
> performance in win32. I also notice that the "gs" gui library
> included
> in the Erlang source, specifically gstk_port_handler.erl and
> gstk.tcl,
> uses a socket rather than stdin/stdout pipes when run in windows. I
> don't see any obvious comments, but I wonder if socket performance is
> much better than pipes under win32.
>
> If this is indeed the reason, then perhaps the documentation should
> mention it and possibly provide an example using sockets.
>
>
>
> ________________________________________________________________
> erlang-questions mailing list. See http://www.erlang.org/faq.html
> erlang-questions (at) erlang.org
--
Ulf Wiger
CTO, Erlang Training & Consulting Ltd.
http://www.erlang-consulting.com
More information about the erlang-questions
mailing list