[erlang-questions] Imagine every (active) entity is a process
Taavi Talvik
taavi@REDACTED
Mon Nov 5 16:32:55 CET 2007
> When I would want to start working on customer "23" for example, I
> will first need to check if customer "23" is already an active
> process. If yes, I get the Pid and exchange whatever messages I need
> with customer "23". If not, I create the process and proceed.
> Now, obviously, for my process to be known by all potential users of
> the process, I must register the process using the register(Name,Pid)
> function. As a name I could concatenate the entity name and its
> primary key (in my case: "customer_23").
>
> Isn't there a race condition here. Since I have to check first if a
> process exists before creating it, I might end up in a situation where
> two other processes are doing the same thing and creating twice a
> process for the same entity. The second would obviously fail and we
> could catch the error. But is this a correct way of proceeding? Also,
> is it possible to have thousands of registered processes (as opposed
> to non registered processes)?
You can serialize process lookup and creation
- yet another process, which is responsible for looking up "actual
serving process"
and if necessary creating new process
- if you keep names private only way to access workers is through
name_resolver and no race any more.
- of course this creates new bottleneck
look at global http://erlang.org/doc/man/global.html
Just register() is only one building block. You need name lookup, new
process creation
and registration coordinated.
references:
http://www.erlang.org/pipermail/erlang-questions/2007-September/
029373.html
http://www.erlang.org/pipermail/erlang-questions/2007-September/
029379.html
best regards,
taavi
More information about the erlang-questions
mailing list