[erlang-questions] gproc and gen_event
Ulf Wiger
ulf@REDACTED
Sat May 19 11:40:34 CEST 2012
On 19 May 2012, at 01:38, Andrew Berman wrote:
> Ok, cool, thanks Garrett.
>
> Do you have any experience using gproc for pub/sub?
Gproc does do pub/sub fairly well, but if I may, the main purpose of
gproc initially was to serve as a form of "property index" for processes.
It had dawned on me that complex signaling applications tended to
end up with a lot of code that basically provided different sorts of
mappings to allow you to locate the right processes. Having so many
different mappings complicated debugging, and obscured many
aspects of the architecture.
When we started using (the predecessor of) gproc in some Ericsson
projects, there was significant code reduction. The nice thing was that
the developers picked it up themselves; there wasn't really any central
decision to go with it.
One of the things I like about gproc is that it allows you to publish the
'interaction features' of a process: registered aliases say much about
what services a process can perform, and properties illustrate its
dependencies on other processes. The registry can be queried with
select operations or QLC, or simply with gproc:i() from the shell.
In short, there are many fine ways of doing pub/sub, but if you use
gproc consistently for this sort of thing, and similar things, it can help
clarify runtime aspects of your system, making it more transparent and
easier to debug.
This also explains why gproc relies on a central registry (which is a
challenge in the global case). The registry itself is much of the point.
Of course, for a distributed pub/sub, you don't really need to turn on
the distributed parts of gproc. Running a local gproc instance on each
node, you can publish like so:
publish(Event, Data) ->
rpc:eval_everywhere(
gproc, send,
[{p, l, {?MODULE, Event}}, {?MODULE, Event, Data}]).
BR,
Ulf W
Ulf Wiger, Co-founder & Developer Advocate, Feuerlabs Inc.
http://feuerlabs.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20120519/a27a5bca/attachment.htm>
More information about the erlang-questions
mailing list