pg
Distributed, Named Process Groups
This (experimental) module implements process groups. A process
group is a group of processes that can be accessed by a common
name. For example, a group named foobar
can include a set
of processes as members of this group and they can be located on
different nodes.
When messages are sent to the named group, all members of
the group receive the message. The messages are serialized. If
the process P1
sends the message M1
to the group,
and process P2
simultaneously sends message M2
, then
all members of the group receive the two messages in the same
order. If members of a group terminate, they are automatically
removed from the group.
This module is not complete. The module is inspired by the ISIS system and the causal order protocol of the ISIS system should also be implemented. At the moment, all messages are serialized by sending them through a group master process.
Functions
create(PgName) -> ok | {error, Reason}
PgName = term()
Reason = already_created | term()
Creates an empty group named PgName
on the current
node.
create(PgName, Node) -> ok | {error, Reason}
PgName = term()
Node = node()
Reason = already_created | term()
Creates an empty group named PgName
on the node
Node
.
join(PgName, Pid) -> Members
PgName = term()
Pid = pid()
Members = [pid()]
Joins the pid Pid
to the process group PgName
.
Returns a list of all old members of the group.
send(PgName, Msg) -> void()
PgName = Msg = term()
Sends the tuple {pg_message, From, PgName, Msg}
to
all members of the process group PgName
.
Failure: {badarg, {PgName, Msg}}
if PgName
is
not a process group (a globally registered name).
esend(PgName, Msg) -> void()
PgName = Msg = term()
Sends the tuple {pg_message, From, PgName, Msg}
to
all members of the process group PgName
, except
ourselves.
Failure: {badarg, {PgName, Msg}}
if PgName
is
not a process group (a globally registered name).
members(PgName) -> Members
PgName = term()
Members = [pid()]
Returns a list of all members of the process group
PgName
.