[erlang-questions] using flush() for batches from mailbox
Gleb Peregud
gleber.p@REDACTED
Mon Oct 15 21:36:55 CEST 2012
On Mon, Oct 15, 2012 at 7:31 PM, AD <straightflush@REDACTED> wrote:
> Hello,
>
> I have a use case where I would like to flush() the Mailbox in a loop. I
> have a process that takes about 500ms to execute, and i would like the
> process to operate on batches of messages from the Mailbox rather than 1 at
> a time. Since the sender can push messages to the mailbox at tens of
> messages/sec and I would like to preserve order, the most efficient way
> right now I think of is to take messages off the mailbox in batches.
>
> If there is a process sending to a gen_server:cast at , say, 10 messages/sec
> , can i use flush to consume all 10 messages from teh mailbox at once?
> Something like
>
> flush() ->
> receive
> _ -> flush()
> after
> 0 -> ok
> end.
Of course you can. The code is correct as well. There are two problems here:
1) It will consume gen_server:calls, hence callers will timeout
2) It will consume sys messages, hence e.g. sys:get_status/1 won't work
Cheers,
Gleb Peregud
More information about the erlang-questions
mailing list