table of contents
other versions
- jessie 1:17.3-dfsg-4+deb8u2
- jessie-backports 1:19.2.1+dfsg-2+deb9u1~bpo8+1
- stretch 1:19.2.1+dfsg-2+deb9u2
- testing 1:21.2.5+dfsg-1
- unstable 1:21.2.6+dfsg-1
- experimental 1:22.0~rc1+dfsg-1
pg2(3erl) | Erlang Module Definition | pg2(3erl) |
NAME¶
pg2 - Distributed named process groups.DESCRIPTION¶
This module implements process groups. Each message can be sent to one, some, or all group members. A group of processes can be accessed by a common name. For example, if there is a group named foobar, there can be a set of processes (which can be located on different nodes) that are all members of the group foobar. There are no special functions for sending a message to the group. Instead, client functions are to be written with the functions get_members/1 and get_local_members/1 to determine which processes are members of the group. Then the message can be sent to one or more group members. If a member terminates, it is automatically removed from the group.Warning:
This module is used by module disk_log for managing distributed
disk logs. The disk log names are used as group names, which means that some
action can be needed to avoid name clashes.
DATA TYPES¶
name() = any()
The name of a process group.
EXPORTS¶
create(Name :: name()) -> ok
Creates a new, empty process group. The group is globally visible on all nodes.
If the group exists, nothing happens.
delete(Name :: name()) -> ok
Deletes a process group.
get_closest_pid(Name) -> pid() | {error, Reason}
Types:
Name = name()
Reason = {no_process, Name} | {no_such_group, Name}
A useful dispatch function that can be used from client functions. It returns a
process on the local node, if such a process exists. Otherwise, it selects one
randomly.
get_local_members(Name) -> [pid()] | {error, {no_such_group, Name}}
Types:
Name = name()
Returns all processes running on the local node in the group Name. This
function is to be used from within a client function that accesses the group.
It is therefore optimized for speed.
get_members(Name) -> [pid()] | {error, {no_such_group, Name}}
Types:
Name = name()
Returns all processes in the group Name. This function is to be used from
within a client function that accesses the group. It is therefore optimized
for speed.
join(Name, Pid :: pid()) -> ok | {error, {no_such_group, Name}}
Types:
Name = name()
Joins the process Pid to the group Name. A process can join a
group many times and must then leave the group the same number of times.
leave(Name, Pid :: pid()) -> ok | {error, {no_such_group, Name}}
Types:
Name = name()
Makes the process Pid leave the group Name. If the process is not
a member of the group, ok is returned.
start() -> {ok, pid()} | {error, any()}
start_link() -> {ok, pid()} | {error, any()}
Starts the pg2 server. Normally, the server does not need to be started
explicitly, as it is started dynamically if it is needed. This is useful
during development, but in a target system the server is to be started
explicitly. Use the configuration parameters for kernel(7) for
this.
which_groups() -> [Name :: name()]
Returns a list of all known groups.
SEE ALSO¶
kernel(7)kernel 5.1.1 | Ericsson AB |