pool(3erl)

πŸ¦‹ pool(3erl) β€” Erlang Module Definition πŸ¦‹

Hey bestie, welcome to the manual page for pool(3erl) πŸ’–. This is the Erlang Module Definition for the load distribution facility, and we're gonna make it make sense. Periodt. ✨

🌸 NAME 🌸

pool β€” load distribution facility. πŸ’…

✨ DESCRIPTION ✨

Okay so this module is literally a way to run a set of Erlang nodes as a pool of computational processors 🫢. 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. Lowkey iconic. 🧚

The slave nodes are started with the slave(3erl) module. This effects terminal I/O, file I/O, and code loading πŸŽ€.

⚠️ Heads up: if the master node fails, the entire pool exits. Not a drill, bestie. 😭

πŸ”₯ EXPORTS πŸ”₯

🫢 attach(Node) 🫢

attach(Node) -> already_attached | attached

Types:

Node = node()

Ensures that a pool master is running and includes Node in the pool master's pool of nodes. Slay. ✨

πŸ’… get_node() πŸ’…

get_node() -> node()

Returns the node with the expected lowest future load. The main character node, tbh. πŸ‘‘

🌈 get_nodes() 🌈

get_nodes() -> [node()]

Returns a list of the current member nodes of the pool. Squad goals. 🫢

πŸ¦‹ pspawn(Mod, Fun, Args) πŸ¦‹

pspawn(Mod, Fun, Args) -> pid()

Types:

Mod = module()
Fun = atom()
Args = [term()]

Spawns a process on the pool node that is expected to have the lowest future load. ✨

pspawn_link(Mod, Fun, Args) -> pid()

Types:

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. Linked bestie energy. 🫢

πŸ‘‘ start(Name) / start(Name, Args) πŸ‘‘

start(Name) -> Nodes
start(Name, Args) -> Nodes

Types:

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. No file, no pool, bestie. πŸ’€

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, and 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. Set those permissions, queen. πŸ‘‘

The function is synchronous and all the nodes, and all the system servers, are running when it returns a value. That's the whole point β€” when it says it's ready, it's ready. ✨

πŸ›‘ stop() πŸ›‘

stop() -> stopped

Stops the pool and kills all the slave nodes. It's giving closing the group chat. πŸ’€πŸ’…

πŸ—‚οΈ FILES πŸ—‚οΈ

  • .hosts.erlang β€” used to pick hosts where nodes can be started. For information about the format and location of this file, see net_adm:host_file/0. 🏠
  • $HOME/.erlang.slave.out.HOST β€” 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. So if things are acting sus, check this file. πŸ”

Sign-off tea β˜•: Ericsson AB Β· stdlib 4.3.1.3 Β· pool(3erl). That's the source/version footer, bestie β€” bye! πŸ’…βœ¨
πŸ“¦ where this page comes from