Acquire

Takes a unit of a resource pool for each entity. Input and output.

How it works#

The Acquire gives each entity that passes one unit of a Resource Pool: a connection, a thread, whatever the pool stands for. An entity that finds a free unit takes it and passes on at once, holding it. The entity keeps the unit through every component that follows, until a Release of the same pool returns it or the entity leaves the model.

An entity that finds no free unit waits at the Acquire. The Acquire itself never refuses an entity and never makes a sender wait: it takes in every entity it is sent and holds the ones that have to wait. They join the pool's one waiting line, shared by every Acquire that names the pool, and are served in arrival order as units come back. An entity takes one unit at a time, and there is no limit on how many can wait. An entity that has waited for the pool's Acquire Timeout is dropped and counted against the Acquire it was waiting at.

An entity that enters an Acquire of a pool it already holds a unit of takes another unit. And an entity can hold units of several pools at once — a thread and a connection, say — by passing through an Acquire for each.

An Acquire is passive on its input and active on its output, like a delay, a router or a shared server. So it can follow a generator, a server, a delay, a router, a shared server, a Release or another Acquire, and hand on to a queue, a delay, a router, a shared server, a Release or another Acquire. A queue cannot feed it directly, and a server cannot pull from it: to serve what comes out of an Acquire, put a queue between them. Several components can connect into its one input.

An Acquire must have an incoming connection and a pool: a run will not start while it is not connected to any source or has no pool chosen. Its outgoing side is optional: with nothing connected, entities count as completed as soon as they have their unit, and leave the model. An Acquire does not wait at a full queue: an entity the queue has no room for is dropped at once and counted against the Acquire, and its unit returns to the pool.

Settings#

Poola Resource Pool on the canvas
The Resource Pool the Acquire takes a unit from, chosen from the pools on the canvas. Its name is shown under the node.

The pool cannot be changed while the simulation runs. How many units there are and how long an entity waits for one are settings of the Resource Pool, shared by every Acquire that names it.

Statistics#

  • Requests waiting — how many entities are waiting at this Acquire, over time. The pool's own chart shows the total across all its Acquires.
  • Entity rate — served and dropped entities per second over time. Drops here are entities that waited out the Acquire Timeout, or that a full queue after the Acquire turned away.
  • Time waiting for a unit — the mean time, in seconds, over the chart window. Every served entity counts, and one served at once counts as zero. A dropped entity is left out and shows in the dropped rate instead.
  • After a batch run, the mean requests waiting, the served and dropped rates, and the time waiting for a unit, each as a mean per run with a confidence interval. Time waiting for a unit is the mean in Basic mode and the mean, median, 95th and 99th percentile in Advanced mode; a wait that began during the warm-up is left out.

How many units are in use and how long each is held is reported by the Resource Pool.