How far apart competing implementations of the same primitive land in the selected run. Each ratio is a variant's mean time over the fastest ranked variant's: 1.00 is the winner, 2.00 twice as slow.
Click a library to hide or show it. Pooled, Nito.AsyncEx, ProtoPromise, RefImpl and System stay pinned leftmost and can't be hidden.
Ratios use the scenario closest to normal use: one contending party with a live, uncancelled token where measured. Averaging over every
contention level would let whichever variant scales worst dominate; the trends dashboard's
"Scaling by contention" view shows that instead.
See also the library matrix. The raw baselines some classes record
(Interlocked, lock, SpinLock) are not primitives and are left out.
n/c (non-competing, hors concours) cells are measured and shown for scale
but held out of the ratio (the measured mean is in the tooltip), because they skip work the others pay for on every call: the
vendored RefImpl (no cancellation, timeout or pooling); DotNext's
AsyncExclusiveLock and reader-writer lock (no disposable releaser); and "System" in
the AutoResetEvent, ManualResetEvent, Barrier and ReaderWriterLockSlim rows (a blocking wait).
Hover a cell for the reason.
† "System" primitive that may lack a true async wait, so its number is a
baseline rather than a fair race. ‡ ProtoPromise, which uses its own
Promise and cancellation token types rather than ValueTask and
CancellationToken, so it is not drop-in compatible.
Data: benchmark-history.sqlite, built from the benchmarks branch.