[erlang-questions] performance vs msg queue length
Tue Apr 20 20:41:47 CEST 2010
Good to know about mnesia and gen_server doing selective receives, but I am
not using either. BTW, I found some other evidence of this slowdown from an
earlier posting. Although the main post was about interpreter speed, I
found these benchmark numbers quite strange for the compiled version as
well. With message queues of 10k, it looks like about 3x slowdown.
[begin [ self() ! a || _ <- lists:seq(1,N) ],
> S = now(),
> [ receive _ -> ok end || _ <- lists:seq(1,N) ],
> io:format("~w~n", [timer:now_diff(now(), S) / N])
> end || N <- [1,10,100,1000,10000]].
> If I put it into a module, add 1e5 and 1e6 then I get:
> 1> test:test().
On Tue, Apr 20, 2010 at 8:00 AM, David Mercer <> wrote:
> On Tuesday, April 20, 2010, Ulf Wiger wrote:
> > One of the things being debated is how much rope should be given
> > to the programmers, that they may hang themselves with. One great
> > advantage of having the compiler do it internally is that it
> > would only do so if in cases where it is absolutely safe to do
> > so.
> > I think the pattern would work in most, but not necessarily all,
> > of the places where selective receive is required. For the
> > remaining cases, I'm not convinced - off the top of my head -
> > that an explicit mark_queue() function would help either
> > (but that's from spending 10 seconds thinking about it, so I
> > may well be wrong.)
> Unfortunately, my spot-check of about 30 selective receives within the OTP
> library indicates that a receive after an erlang:monitor is the exception
> rather than the rule. I may have just been unlucky, and I'm sure ROK could
> put his code-scanner to work to tell us exactly how often it occurs.
> erlang-questions (at) erlang.org mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:
More information about the erlang-questions