Skip to content

benchmark v2.0.14 2025‐08‐03

Adam Ning edited this page Aug 2, 2025 · 7 revisions

Benchmark Result

Platform

  • Intel(R) Core(TM) i7-8550U 4 cores with 8 hyper-threads, turbo boost on
  • Ubuntu 24.04
  • rust 1.87.0
  • tokio 1.47.0
  • crossbeam v0.8.4
  • flume 0.11.1
  • kanal 0.1.1

async context

bounded size 100 async

unit: million/s

mpsc bounded_async (size 100) 1x1 2x1 4x1 8x1 16x1
crossfire::mpmc 21.506 16.012 14.306 10.294 12.251
crossfire::mpsc 22.345 18.062 14.405 10.326 10.403
crossfire::spsc 25.205        
kanal 8.4339 8.3596 7.7418 7.6994 7.8384
flume 5.3625 4.3943 2.9271 1.9059 1.4388

mpsc bounded size 100 async

mpmc bounded_async (size 100) 2x2 4x4 8x8 16x16
crossfire::mpmc 15.98 16.082 13.595 13.433
kanal 16.45 4.3938 5.9732 11.752
flume 4.1362 2.685 2.3369 2.2937

mpmc bounded size 100 async

Bounded size 1 async

unit: million/s

mpsc bounded_async (size 1) 1x1 2x1 4x1 8x1 16x1
crossfire::mpmc 5.0778 4.5659 5.928 5.2751 5.2382
crossfire::mpsc 5.1416 5.2351 5.9974 5.2129 5.304
crossfire::spsc 5.2958        
flume 0.17626 0.24744 0.42052 0.56692 0.53564
kanal 0.32333 0.38732 0.55014 0.84246 0.70997

mpsc bounded size 1 async

Unbounded async

unit: million/s

mpsc unbounded_async 1x1 2x1 4x1 8x1 16x1
crossfire::mpmc 19.823 22.527 20.89 17.932 18.442
crossfire::mpsc 20.357 22.222 20.884 18.726 18.392
crossfire::spsc 20.478        
flume 7.9879 8.186 6.2164 5.0646 5.0781
kanal 23.312 24.798 23.36 21.38 22.114

mpsc unbounded async

unit: million/s

mpmc ubounded_async   2x2 4x4 8x8 16x16
crossfire::mpmc   24.809 19.806 19.05 19.308
flume   4.7015 3.1206 3.0562 2.9572
kanal   19.235 14.868 13.537 13.014

mpmc unbounded async

blocking context

NOTE: crossfire v2.0.X re-exported blocking context API from crossbeam.

bounded size 1 blocking

unit: million/s

mpsc bounded_sync (size 1) 1x1 2x1 4x1 8x1 16x1
crossbeam 4.8835 4.8182 6.3623 5.3511 4.8268
kanal 2.8673 3.1613 2.2197 1.205 0.81686

bounded size 100 blocking

unit: million/s

mpsc bounded_sync (size 100) 1x1 2x1 4x1 8x1 16x1
crossbeam 17.817 18.881 19.659 19.553 16.912
kanal 6.5858 5.1853 7.092 3.2021 2.2863
flume 7.9591 5.4153 2.0428 0.71437 0.3531
mpmc bounded_sync (size 100)   2x2 4x4 8x8 16x16
crossbeam   14.199 15.507 13.926 8.9083
kanal   6.069 7.1058 6.5273 6.2235
flume   4.4146 2.568 1.8669 1.4746

unbounded blocking

unit: million/s

mpsc unbounded_sync 1x1 2x1 4x1 8x1 16x1
crossbeam 24.926 33.679 30.299 28.324 22.72
kanal 36.218 34.118 31.986 27.859 24.069
mpmc unbounded_sync   2x2 4x4 8x8 16x16
crossbeam   26.689 24.013 25.614 25.543
kanal   26.063 20.549 21.13 15.569

Problem and Analysis

  • crossfire v2.0.14 optimised size 1 with backoff, reached the same level of blocking context as crossbeam, and exceeded flume or kanal.

  • crossfire bounded channel optimised a lot during v2.0.5 & v2.0.7, 2 times faster than v2.0.0, already exceeded the scores of kanal.

  • kanal unbounded channel might grow the allocation aggressively, without shrinking, a bit faster than crossfire/crossbeam.

  • The speed of kanal fluctuated during benchmark, non-regularly changing upon increasing the concurrency.

Clone this wiki locally