pool
Load Distribution Facility
pool
can be used to run a set of Erlang nodes as a pool
of computational processors. It is organized as a master and a
set of slave nodes and includes the following features:
- The slave nodes send regular reports to the master about their current load.
- Queries can be sent to the master to determine which node will have the least load.
The BIF statistics(run_queue)
is used for estimating
future loads. It returns the length of the queue of ready to run
processes in the Erlang runtime system.
The slave nodes are started with the slave
module. This
effects, tty IO, file IO, and code loading.
If the master node fails, the entire pool will exit.
Functions
start(Name) ->
start(Name, Args) -> Nodes
Name = atom()
Args = string()
Nodes = [node()]
Starts a new pool. The file .hosts.erlang
is read to
find host names where the pool nodes can be started. See
section Files below. The
start-up procedure fails if the file is not found.
The slave nodes are started with slave:start/2,3
,
passing along Name
and, if provided, Args
.
Name
is used as the first part of the node names,
Args
is used to specify command line arguments. See
slave(3).
Access rights must be set so that all nodes in the pool have the authority to access each other.
The function is synchronous and all the nodes, as well as all the system servers, are running when it returns a value.
attach(Node) -> already_attached | attached
Node = node()
This function ensures that a pool master is running and
includes Node
in the pool master's pool of nodes.
stop() -> stopped
Stops the pool and kills all the slave nodes.
get_nodes() -> Nodes
Nodes = [node()]
Returns a list of the current member nodes of the pool.
pspawn(Mod, Fun, Args) -> pid()
Mod = Fun = atom()
Args = [term()]
Spawns a process on the pool node which is expected to have the lowest future load.
pspawn_link(Mod, Fun, Args) -> pid()
Mod = Fun = atom()
Args = [term()]
Spawn links a process on the pool node which is expected to have the lowest future load.
get_node() -> node()
Returns the node with the expected lowest future load.
Files
.hosts.erlang
is used to pick hosts where nodes can
be started. See
net_adm(3)
for information about format and location of this file.
$HOME/.erlang.slave.out.HOST
is used for all additional IO
that may come from the slave nodes on standard IO. If the start-up
procedure does not work, this file may indicate the reason.