[erlang-questions] eep: multiple patterns

Sean Hinde sean.hinde@REDACTED
Fri May 30 18:01:45 CEST 2008


On 30 May 2008, at 16:38, Per Melin wrote:

> 2008/5/30 Sean Hinde <sean.hinde@REDACTED>:
>> As I understand it, the problem of poor performance with large  
>> message
>> queues is not specifically related to selective receive, but is  
>> related to
>> garbage collection of a large queue however it grows.
>
> If I send 100k 'foo' messages and then 100k 'bar' messages to a
> process, and then do a catch-all receive until there are no messages
> left, that takes 0.03 seconds.
>
> If I do a selective receive of only the 'bar' messages, it takes 90  
> seconds.

There is no contradiction here. In the first test the message queue  
never grows so you do not get a slowdown.

Badly designed use of selective receive is one way to fill a message  
queue, but by no means the only way. As I understand it once a message  
has been examined and not matched it is not visited again until the  
pattern changes.

I believe that the slowdown you see is because the garbage collector  
is working very hard dealing with all the messages on the live heap.

Note I say "believe" here. This is how it was explained to me by  
someone who should know. I have not instrumented the system to prove  
it to myself.

Sean



More information about the erlang-questions mailing list