Fibre MPSC benchmarks

many producers, one consumer

Throughput in Melem/s: Million items per second per item sent, median of samples. The best result in each row is highlighted. In batched tables, the bracketed figure is the gain over the same implementation's single-item row. A dash means the implementation has no channel for that cell. Measured on MacBook M4 Pro (14 cores).

sync

CapacityP×Cfibrecrossbeamcrossfireflumekanalstd
rendezvous1x10.5450.528-0.4436.420.527
rendezvous16x10.6650.179-0.2111.380.177
rendezvous64x10.5600.168-0.1930.3900.164
11x17.058.2510.80.66810.10.277
116x11.170.1881.830.2112.170.237
164x11.170.1660.5860.2130.5220.233
1281x175.843.527.929.224.844.7
12816x133.911.28.090.2191.020.213
12864x130.90.2756.010.2130.3220.200
10241x1165.165.527.87.1049.3144.0
102416x120.913.614.30.2491.190.247
102464x120.10.96911.70.2320.4230.224
unbounded1x1228.9143.6154.69.85144.4133.3
unbounded16x113.223.017.038.645.67.93
unbounded64x136.330.832.942.311.39.71

sync, batched (512 items per call)

CapacityP×Cfibreflume
1281x127.4 (0.4x)19.6 (0.7x)
12816x126.2 (0.8x)3.44 (15.7x)
12864x126.0 (0.8x)1.35 (6.4x)
10241x1278.4 (1.7x)73.0 (10.3x)
102416x1235.4 (11.3x)18.0 (72.2x)
102464x1247.1 (12.3x)6.53 (28.2x)
unbounded1x1324.9 (1.4x)93.9 (9.5x)
unbounded16x1214.5 (16.2x)47.5 (1.2x)
unbounded64x1212.7 (5.9x)55.1 (1.3x)

Native batch: fibre none, flume receive only.

async

CapacityP×Cfibreasync-channelcrossfireflumekanaltokio
rendezvous1x126.0--7.4523.0-
rendezvous16x16.96--0.9914.57-
rendezvous64x13.96--0.6082.65-
11x19.483.833.817.3629.18.37
116x18.191.760.5630.92920.97.86
164x16.921.790.4710.60510.86.88
1281x164.424.069.838.378.933.2
12816x165.13.6611.44.029.136.07
12864x162.71.347.311.058.672.49
10241x177.228.127.524.758.826.0
102416x177.68.0713.05.952.456.12
102464x176.44.2712.61.704.882.65
unbounded1x1109.230.0109.260.5105.263.4
unbounded16x113.210.0048.031.445.22.61
unbounded64x112.89.4217.032.222.52.45

Unreliable, sample spread over 2x on a 1×1 cell where the rest of the matrix holds within a few percent: crossfire at capacity 1 (2.7x, 2.19 to 5.90), crossfire at capacity 1024 (2.4x, 27.2 to 66.4). Those medians do not support a comparison.

async, batched (512 items per call)

CapacityP×Cfibreflumetokio
1281x1222.9 (3.5x)49.2 (1.3x)44.1 (1.3x)
12816x1214.5 (3.3x)7.39 (1.8x)2.94 (0.5x)
12864x1198.6 (3.2x)4.66 (4.4x)2.38 (1.0x)
10241x1295.2 (3.8x)58.1 (2.4x)43.3 (1.7x)
102416x1290.7 (3.7x)18.5 (3.1x)2.26 (0.4x)
102464x1284.5 (3.7x)16.1 (9.5x)2.42 (0.9x)
unbounded1x1190.9 (1.7x)93.0 (1.5x)110.9 (1.7x)
unbounded16x1210.8 (15.9x)41.2 (1.3x)2.76 (1.1x)
unbounded64x1204.3 (16.0x)43.6 (1.4x)2.09 (0.9x)

Native batch: fibre none, flume receive only, tokio receive only.