Quant Memo
Advanced

Kingman's Formula for G/G/1 Queues

An approximation for the average wait in a single-server queue when arrivals and service times aren't the simple Poisson/exponential case, showing that variability itself — not just how busy the server is — drives delay.

Prerequisites: Queueing Theory and Birth-Death Processes, Little's Law

An exchange's matching engine, or a risk desk's overnight batch job, is a single server processing one request at a time, fed by requests that don't arrive on a neat schedule and don't take identical time to handle. You want to know the average wait before service starts. If arrivals were a Poisson process and service times were exponential, there's a clean closed-form answer. But real order flow and real processing times are lumpier and more variable than that — bursts of orders, occasional slow computations — and for that general case there is no exact formula. Kingman's formula is the standard approximation, and its real message isn't the algebra: it's that variability, not just how busy the server is, is what makes queues blow up.

An analogy: the checkout line that never seems fair

Picture two supermarket checkouts running at the same average speed and the same average customer arrival rate — say both are 80% busy. One has customers arriving at almost perfectly even intervals with almost identical basket sizes. The other has customers who arrive in unpredictable clumps and whose basket sizes range from one item to a full cart. Even though both checkouts do the same average amount of work, the second one will have dramatically longer average waits. The extra wait isn't from being "more busy" — it's from being less predictable. Kingman's formula turns that intuition into a number.

The formula, one symbol at a time

Let ρ\rho (rho) be the utilization — the fraction of time the server is busy, a number between 0 and 1. Let Ca2C_a^2 be the squared coefficient of variation of interarrival times (variance of the gaps between arrivals, divided by their mean squared) — it measures how erratic arrivals are; Ca2=1C_a^2 = 1 for a Poisson process, and it is larger when arrivals cluster. Let Cs2C_s^2 be the same measure for service times. Let E[S]\mathbb{E}[S] be the mean service time. Kingman's approximation for the mean waiting time in queue, E[Wq]\mathbb{E}[W_q], is:

E[Wq](ρ1ρ)(Ca2+Cs22)E[S].\mathbb{E}[W_q] \approx \left( \frac{\rho}{1 - \rho} \right) \left( \frac{C_a^2 + C_s^2}{2} \right) \mathbb{E}[S] .

In plain English: the average wait is the product of two separate effects multiplied together. The first factor, ρ/(1ρ)\rho/(1-\rho), is the pure congestion effect — it explodes as utilization approaches 100%, exactly as in the simple Poisson queue. The second factor, (Ca2+Cs2)/2(C_a^2 + C_s^2)/2, is the pure variability effect — the average of how erratic arrivals are and how erratic service is. Two queues at identical utilization can have very different waits purely because this second factor differs; a perfectly regular queue (Ca2=Cs2=0C_a^2 = C_s^2 = 0) has no wait at all even at high utilization, while a bursty one can have waits many multiples longer.

Worked example 1: comparing two order-routing setups

A router forwards orders to a single downstream venue at ρ=0.8\rho = 0.8 utilization, mean processing time E[S]=2\mathbb{E}[S] = 2 milliseconds. Setup A has fairly regular arrivals and service (Ca2=1C_a^2 = 1, Cs2=1C_s^2 = 1, the Poisson case):

E[Wq]0.80.2×1+12×2=4×1×2=8 ms.\mathbb{E}[W_q] \approx \frac{0.8}{0.2} \times \frac{1+1}{2} \times 2 = 4 \times 1 \times 2 = 8 \text{ ms}.

Setup B has the same utilization and mean service time, but bursty order flow from a single large client and occasional slow retries (Ca2=4C_a^2 = 4, Cs2=2C_s^2 = 2):

E[Wq]4×4+22×2=4×3×2=24 ms.\mathbb{E}[W_q] \approx 4 \times \frac{4+2}{2} \times 2 = 4 \times 3 \times 2 = 24 \text{ ms}.

Same average load, three times the wait — entirely from variability.

Worked example 2: what capacity buys you

Suppose Setup B's ops team can't reduce variability but can add capacity to cut utilization to ρ=0.5\rho = 0.5:

E[Wq]0.50.5×3×2=1×3×2=6 ms.\mathbb{E}[W_q] \approx \frac{0.5}{0.5} \times 3 \times 2 = 1 \times 3 \times 2 = 6 \text{ ms}.

Cutting utilization from 0.8 to 0.5 cuts the wait from 24ms to 6ms — a four-fold improvement from a much smaller drop in load, because the ρ/(1ρ)\rho/(1-\rho) term is so steep near 1. This is the standard argument for never running latency-sensitive infrastructure near full utilization: the congestion term punishes you nonlinearly.

utilization ρ wait high variability low variability
Both curves rise steeply as utilization nears 1, but the high-variability queue sits well above the low-variability one at every utilization level — variability scales the whole curve up.
8ms Setup A 24ms Setup B, ρ=0.8 6ms Setup B, ρ=0.5
Reducing utilization on the bursty queue (Setup B) cuts wait far more than the drop in ρ alone would suggest, because the congestion factor is nonlinear.

What this means in practice

Kingman's formula is the quick sanity check a quant reaches for when sizing infrastructure, market-making quote engines, or any single-stage pipeline without simulating the full arrival and service distributions: measure ρ\rho, Ca2C_a^2, Cs2C_s^2 from historical logs, plug in. It also gives a lever beyond "add servers" — if arrivals or service times can be made more regular (smoothing order submission, capping retry variance), wait drops just as much as adding capacity would, often more cheaply.

Waiting time in a single-server queue scales with two independent factors multiplied together: a congestion factor ρ/(1ρ)\rho/(1-\rho) that depends only on how busy the server is, and a variability factor (Ca2+Cs2)/2(C_a^2 + C_s^2)/2 that depends only on how erratic arrivals and service are — high variability can make a moderately busy queue behave like a nearly saturated one.

It's tempting to read Kingman's formula as exact, but it's an approximation that becomes accurate only in "heavy traffic" — as ρ\rho gets close to 1 — and can be noticeably off at low-to-moderate utilization, especially when service-time distributions are heavy-tailed rather than merely having a large but finite variance. Don't use it to certify a system's latency SLA at low utilization; use simulation or exact formulas (like the Erlang C family) when precision at moderate load actually matters.

Related concepts

Practice in interviews

Further reading

  • Kingman, J.F.C. (1961), The single server queue in heavy traffic
ShareTwitterLinkedIn