gproc

Extended process registry for Erlang

Github stars Tracking Chart

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

Main metrics

Overview
Name With Ownermgdm/Mosquitto-PHP
Primary LanguageC
Program languageErlang (Language Count: 4)
Platform
License:BSD 3-Clause "New" or "Revised" License
所有者活动
Created At2013-09-23 00:40:11
Pushed At2023-10-03 14:27:01
Last Commit At2019-04-30 11:43:58
Release Count0
用户参与
Stargazers Count542
Watchers Count61
Fork Count148
Commits Count257
Has Issues Enabled
Issues Count99
Issue Open Count47
Pull Requests Count25
Pull Requests Open Count5
Pull Requests Close Count3
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private