Fibre Channel Arena
fibre against tokio, crossbeam, crossfire, flume, kanal, async-channel, futures, the oneshot crate and std, through one workload driver.
Results
Test run
- Machine
- MacBook M4 Pro (14 cores)
- Measured
- Not recorded
| Implementation | Crate | Version |
|---|---|---|
| fibre | fibre | 0.6.7 |
| fibre-exclusive | fibre | 0.6.7 |
| fibre-pool | fibre | 0.6.7 |
| fibre-pool-host | fibre | 0.6.7 |
| async-channel | async-channel | 2.5.0 |
| async-oneshot | async-oneshot | 0.5.9 |
| crossbeam | crossbeam-channel | 0.5.16 |
| crossfire | crossfire | 3.1.20 |
| flume | flume | 0.11.1 |
| futures | futures-channel | 0.3.33 |
| kanal | kanal | 0.1.1 |
| lite-sync | lite-sync | 0.3.0 |
| oneshot | oneshot | 0.1.13 |
| std | std | 1.98.1 |
| sync-oneshot | sync-oneshot | 0.2.0 |
| tokio | tokio | 1.53.1 |
Method
Each cell moves u64 items through one channel with P producer threads (or tasks) and C consumers. Producers send an equal share each and drop their handle; consumers receive until the channel disconnects. Item count is calibrated per cell to a wall-clock target.
Timing starts once every worker has reached a barrier, excluding spawn and channel construction. Item accounting is verified per run; a cell whose counts do not balance is dropped. Sample rounds are interleaved across implementations.
Pairings are clamped to what each shape allows, so only MPMC shows all seven. A general-purpose MPMC library is measured under the SPSC, MPSC and MPMC shapes; fibre uses its specialized channel per shape.
Capacities are rendezvous, 1, 128, 1024 and unbounded, with a lower item ceiling on unbounded cells. Batched cells run at capacity 128 and above, for implementations with a batch API.
Oneshot is the exception to all of that: its channel is spent by a single op, so capacity, pairing and batching have one legal value each and the axis that remains is whether channel construction sits inside the timed region. See that page for the two stages.
Reproducibility
1×1 rows reproduce within a few percent. Rows at 16 and 64 threads oversubscribe a 14-core machine and do not: over four runs of MPSC/sync/cap-128/64×1, fibre held 0.579-0.601 Melem/s, kanal 0.359-0.640, crossbeam 8.43-11.9, with crossbeam's spread inside one run reaching 1.24-18.6.
