Queueing Theory Simulator (M/M/1)
arrival/service rates and queue stability
the rho cliff 🖖
L = ρ/(1−ρ) doesn't grow smoothly — it has a vertical asymptote at ρ = 1, so as utilization creeps from 90% to 99% the average queue length jumps from 9 people to 99, and right at capacity it's unbounded. That's the 'rho cliff': a queue at 80% utilization feels almost identical to one at 85%, but push it to 95% and wait times balloon, because W = 1/(μ−λ) has the same singularity — the denominator is shrinking toward zero, not the numerator growing. It's why real systems like call centers and hospital ERs are deliberately overprovisioned well below 100% capacity: that 'wasted' idle headroom near the top is what keeps you off the cliff.
randomness is what builds the line 🖖
In M/M/1 the two M's stand for "Markovian": arrivals come at random (Poisson) and service times vary at random (exponential), through a single server. The core idea is surprising — a queue can build even when the server is on average faster than customers arrive. If everyone showed up like clockwork and every job took the same time, a server with spare capacity would never form a line. Waiting comes from variability, not from overload. Set λ well below μ and a line still flickers in and out.
Little's Law asks for almost nothing 🖖
The L and W shown here aren't independent — they satisfy L = λW, and likewise Lq = λWq. What's startling is how little that identity assumes: John Little proved in 1961 that it holds for essentially any stable queue in steady state, whatever the arrival or service distributions, however many servers, and in whatever order customers are served. The same relation governs a hospital ward, a factory's work-in-progress, and a store's inventory — average contents equal arrival rate times average time spent inside.
Example problems
- light load - Low utilization keeps queue and delay small.
- heavy load - heavy load
- unstable - Utilization above 1 makes queue unstable.