Local node worker process pool

Steve Davis steven.charles.davis@REDACTED
Tue Jan 12 14:28:44 CET 2010


Hi Ciprian,

Take a closer look at gen_server:cast() which is the asynchronous
"call" to a gen_server.

/s


On Jan 12, 7:00 am, "Ciprian Dorin, Craciun"
<ciprian.crac...@REDACTED> wrote:
>     Hello all!
>
>     I have the following simple use-case, and I'm not sure how to
> efficiently implement it: I have some processes that need to send
> updates to some statistics engine, but I don't want to wait (or
> receive) the reply. (By processes I mean gen_server implementations,
> and by update I mean `gen_server:call` like messages) Thus I have the
> following options:
>
>     a) send the message just like `gen_server:call` would have done,
> and then be prepared to ignore the reply; drawbacks:
>       * I would have to hard-code the gen_server call protocol, thus
> maybe (highly improbable) breaking the backward / forward portability;
>       * I have to ignore all the replies, which increases the source
> code and might fill the message queue;
>
>     b) spawn a process in the background that shall send the request
> (and wait for the reply); drawbacks:
>       * it wight overload the virtual machine with too many processes;
>
>     c) implement a `pool` like system that allows me to set the number
> of workers, and then enqueue the requests in a round-robin fashion to
> the workers; drawbacks:
>       * if there are too many requests they are going to pile up in
> the queue (actual instance of the `queue` module);
>      advantages:
>        * as the requests are "on best effort" it allows the virtual
> machine to carry on with the important work, and only a portion of the
> time (proportional with the number of workers) to be allocated to
> these requests;
>
>     d) use the existing `pool` module, but which is designed for
> distributed Erlang nodes;
>
>     Also the same problem (which leads only to solutions b and c),
> would be asynchronous function calls: I have a function, which takes
> some time to compute something, and I don't want to wait for it to
> finish, and also it's not that important so I don't want to dedicate
> an entire process to it.
>
>     Any ideas? Any already existing solutions?
>
>     Thanks,
>     Ciprian.
>
> ________________________________________________________________
> erlang-questions mailing list. Seehttp://www.erlang.org/faq.html
> erlang-questions (at) erlang.org


More information about the erlang-questions mailing list