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

Ulf Wiger 7c0d81abed ensure_reg() and ensure_reg_other() 8 years ago
doc 1c6280c04f regenerated docs 8 years ago
ebin 9b465e4c33 Add ebin/.gitignore 12 years ago
include 6c0ab17fdb Resources & resource_counters work in both scopes (test cases added) 9 years ago
patches d0bc9d2409 restructuring 16 years ago
priv 002f94b6e3 make uwiger/gproc the new root; fix email & targets 10 years ago
reference 98ba2d9bfa added rebar support 14 years ago
src 7c0d81abed ensure_reg() and ensure_reg_other() 8 years ago
test 7c0d81abed ensure_reg() and ensure_reg_other() 8 years ago
tetrapak 115fc05067 Fixed tupo. 12 years ago
.gitignore 5be363e9e0 don't ignore ebin/ (may interfere with -include_lib) 12 years ago
.travis.yml 519d547fe0 Add recent OTP releases to be tested on Travis CI 10 years ago
LICENSE 9ae8d8feab Added license file 12 years ago
LICENSE.txt 26b48aece0 added EPL 1.1 LICENSE.txt 12 years ago
Makefile 002f94b6e3 make uwiger/gproc the new root; fix email & targets 10 years ago
README.md 1c6280c04f regenerated docs 8 years ago
rebar 45a17acab8 New rebar with REBAR_DEPS_DIR 11 years ago
rebar.config 002f94b6e3 make uwiger/gproc the new root; fix email & targets 10 years ago
rebar.config.script 301ccd2838 rebar.config.script was only a symlink 12 years ago

README.md

The gproc application

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

Extended process dictionary

Build Status Hex pm

Note

Gproc has two dependencies: gen_leader and edown. Since most people don't actively use either, they are no longer fetched by default.

  • To enable fetching of gen_leader, export the OS environment variableGPROC_DIST=true (this can be done e.g. from a GNU Makefile)

  • edown is fetched on-demand whenever rebar get-deps doc is called (which happens when you call make doc)

Installation

You can get gproc from the Hex package manager

That means declaring dependency on {gproc, "0.5.0"} in your rebar3-based applications or {:gproc, "~> 0.5.0"} in your mix based applications.

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_pool
gproc_ps
gproc_pt
gproc_sup