mirror https://github.com/uwiger/gproc

Magnus Feuer a2a500c2d1 Fixed tupo. 12 лет назад
doc 44a3ad7d34 rebar.config.script and dynamic deps handling 12 лет назад
include 1740e41069 Fix dist update_counter() bug, add gproc_ps module, add update_counters/1 13 лет назад
patches d0bc9d2409 restructuring 16 лет назад
priv 44a3ad7d34 rebar.config.script and dynamic deps handling 12 лет назад
reference 98ba2d9bfa added rebar support 14 лет назад
src de092f5cbf dynamic deps handling, fixed deps 12 лет назад
test 215b6604db Fix unused variables 12 лет назад
tetrapak a2a500c2d1 Fixed tupo. 12 лет назад
.gitignore 9c8845370b 'git' tag in .app.src; addressed warnings 13 лет назад
LICENSE 9ae8d8feab Added license file 12 лет назад
LICENSE.txt 26b48aece0 added EPL 1.1 LICENSE.txt 12 лет назад
Makefile d16e15ca9f updated make doc target 12 лет назад
README.md 44a3ad7d34 rebar.config.script and dynamic deps handling 12 лет назад
rebar f594597c84 rebuilt local rebar with R14B04 12 лет назад
rebar.config de092f5cbf dynamic deps handling, fixed deps 12 лет назад
rebar.config.script 301ccd2838 rebar.config.script was only a symlink 12 лет назад

README.md

#The gproc application#

Authors: Ulf Wiger (ulf.wiger@erlang-solutions.com), Joseph Wayne Norton (norton@geminimobile.com).

Extended process dictionary

##Introduction##

Gproc is a process dictionary for Erlang, which provides a number of useful features beyond what the built-in dictionary has:

  • Use any term as a process alias

  • Register a process under several aliases

  • Non-unique properties can be registered simultaneously by many processes

  • QLC and match specification interface for efficient queries on the dictionary

  • Await registration, let's you wait until a process registers itself

  • Atomically give away registered names and properties to another process

  • Counters, and aggregated counters, which automatically maintain the total of all counters with a given name

  • Global registry, with all the above functions applied to a network of nodes

###Use case: System inspection##

Gproc was designed to work as a central index for "process metadata", i.e. properties that describe the role and characteristics of each process. Having a single registry that is flexible enough to hold important types of property makes it easier to (a) find processes of a certain type, and (b) query and browse key data in a running system.

###Use case: Pub/Sub patterns##

An interesting application of gproc is building publish/subscribe patterns. Example:

subscribe(EventType) ->

%% Gproc notation: {p, l, Name} means {(p)roperty, (l)ocal, Name}
gproc:reg({p, l, {?MODULE, EventType}}).

notify(EventType, Msg) ->

Key = {?MODULE, EventType},
gproc:send({p, l, Key}, {self(), Key, Msg}).

###Use case: Environment handling##

Gproc provides a set of functions to read environment variables, possibly from alternative sources, and cache them for efficient lookup. Caching also provides a way to see which processes rely on certain configuration values, as well as which values they actually ended up using.

See gproc:get_env/4, gproc:get_set_env/4 and gproc:set_env/5 for details.

##Testing##

Gproc has a QuickCheck test suite, covering a fairly large part of the local gproc functionality, although none of the global registry. It requires a commercial EQC license, but rebar is smart enough to detect whether EQC is available, and if it isn't, the code in gproc_eqc.erl will be "defined away".

There is also an eunit suite, covering the basic operations for local and global gproc.

##Building Edoc##

By default, ./rebar doc generates Github-flavored Markdown files. If you want to change this, remove the edoc_opts line from rebar.config.Gproc was first introduced at the ACM SIGPLAN Erlang Workshop in Freiburg 2007 (Paper available here).

##Modules##

gproc
gproc_app
gproc_bcast
gproc_dist
gproc_info
gproc_init
gproc_lib
gproc_monitor
gproc_ps
gproc_sup