benchmark_rust_and_go_currency

Flame graphs

One perf record at 9999 Hz per test, full sizes, recorded 2026-09-19 at commit 9f0fdab. Whole process, startup and untimed passes included. Hover shows each frame’s CPU time (samples ÷ 9,999 Hz); kernel frames end in _[k]. Rust is built with frame pointers for complete stacks. Rust async fn bodies (f::{closure#0}) are shown as f; the closures and Go gowrap wrappers that only start a thread or goroutine are hidden.

Numbers are medians from the benchmark run full-20260919-182448 (commit 9f0fdab); each links to its flame graph.

12 threads

Test Tokio Tuned Tokio, Tokio channels Tuned Tokio Crossbeam Go Unit
1 sender → 1 receiver, capacity 1024 13.2M 23.8M 137M 38.3M 29.6M messages/s
1 sender → 1 receiver, capacity 1 5.13M 5.12M 20.5M 6.76M 11.3M messages/s
4 senders → 1 receiver, capacity 1024 8.81M 7.07M 104M 35.4M 25.9M messages/s
4 senders → 1 receiver, capacity 1 5.00M 4.92M 20.0M 5.74M 10.1M messages/s
4 senders → 4 receivers, capacity 1024 9.32M (async-channel) 9.21M (async-channel) 81.0M 23.3M 18.7M messages/s
4 senders → 4 receivers, capacity 1 2.03M (async-channel) 1.93M (async-channel) 19.4M 5.17M 6.87M messages/s
Ping-pong 4.46M 4.35M 7.51M 3.86M 4.03M round trips/s
Spawn and join, 1M tasks 4.05M 5.44M 5.41M 29.2K at 10K 6.48M tasks/s
CPU-heavy hashing 116M 116M 115M 114M 108M items/s
Select over 2 channels, capacity 1024 20.6M 40.6M 40.6M 13.8M 13.9M messages/s
Select over 2 channels, capacity 1 5.96M 5.34M 5.37M 7.37M 7.30M messages/s
Lock contention, 8 workers 9.78M 81.9M 80.0M 31.9M 25.6M increments/s