pool(3)

πŸ’– NAME πŸ’–

okay so this is pool(3) β€” from the Erlang Module Definition β€” and the module is pool, aka a Load distribution facility. It's giving "share the compute, bestie." ✨

πŸ¦‹ DESCRIPTION πŸ¦‹

This module can be used to run a set of Erlang nodes as a pool of computational processors. Periodt. It's organized as a master and a set of slave nodes, and it 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 terminal I/O, file I/O, and code loading.

⚠️ If the master node fails, the entire pool exits. Not a drill, bestie. πŸ’€

πŸ“ Files πŸ“

.hosts.erlang is used to pick hosts where nodes can be started. For information about format and location of this file, see net_adm:host_file/0. πŸ—‚οΈ

$HOME/.erlang.slave.out.HOST is used for all extra I/O that can come from the slave nodes on standard I/O. If the startup procedure does not work, this file can indicate the reason. πŸ•΅οΈ

✨ FUNCTIONS ✨

πŸ’… attach πŸ’…

attach(Node) -> already_attached | attached when Node :: node().

Ensures that a pool master is running and includes Node in the pool master's pool of nodes. So like, if the master isn't up yet, it gets the party started. πŸŽ‰

πŸ’… get_node πŸ’…

get_node() -> node().

Returns the node with the expected lowest future load. It's literally the "least stressed bestie" finder. 🧘

πŸ’… get_nodes πŸ’…

get_nodes() -> [node()].

Returns a list of the current member nodes of the pool. The whole squad, assembled. πŸ‘‘

πŸ’… pspawn πŸ’…

pspawn(Mod, Fun, Args) -> pid()
                 when Mod :: module(), Fun :: atom(), Args :: [term()].

Spawns a process on the pool node that is expected to have the lowest future load. Go where the vibes are chillest. πŸ¦‹

pspawn_link(Mod, Fun, Args) -> pid()
                      when
                          Mod :: module(),
                          Fun :: atom(),
                          Args :: [term()].

Spawns and links to a process on the pool node that is expected to have the lowest future load. Same energy as above, but now y'all are linked. πŸ”—

πŸ’… start πŸ’…

start(Name, Args) -> Nodes
                when 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. The startup 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.

πŸ” Access rights must be set so that all nodes in the pool have the authority to access each other. No gatekeeping allowed.

The function is synchronous and all the nodes, and all the system servers, are running when it returns a value. So when it comes back, everything is ready ready. βœ…

πŸ’… stop πŸ’…

stop() -> stopped.

Stops the pool and kills all the slave nodes. It's giving "clean up, pack up, go home." πŸ’–


Mwah πŸ’‹ β€” Ericsson AB, stdlib 8.0.4, pool(3). That's the whole page, bestie, no cap. 🫢

πŸ“¦ where this page comes from