Counter application — single-threaded, 10s per concurrency level, wrk load generator
| # | Language | Framework | Peak req/s | @ conns | Avg (ms) | p99 (ms) | |
|---|---|---|---|---|---|---|---|
| 1 | Rust | axum + tokio | 407,045 | 8 | 0.019 | 0.029 | |
| 2 | letloop | flow2 + io_uring | 305,820 | 16 | 0.052 | 0.083 | |
| 3 | Bun (canary) | Bun.serve() (canary, Rust) | 302,935 | 32 | 0.106 | 0.189 | |
| 4 | Bun | Bun.serve() | 294,188 | 8 | 0.028 | 0.093 | |
| 5 | Node.js | http (stdlib) | 192,297 | 8 | 0.044 | 0.079 | |
| 6 | FastAPI | uvicorn | 36,096 | 64 | 1.77 | 1.80 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 163,701 | 0.012 | 0.019 |
| 2 | 348,020 | 0.007 | 0.014 |
| 4 | 393,952 | 0.011 | 0.019 |
| 8 | 407,045 | 0.019 | 0.029 |
| 16 | 389,557 | 0.042 | 0.058 |
| 32 | 377,997 | 0.084 | 0.106 |
| 64 | 372,498 | 0.168 | 0.188 |
| 128 | 358,274 | 0.325 | 0.394 |
| 256 | 346,981 | 0.673 | 0.87 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 131,731 | 0.014 | 0.033 |
| 2 | 212,046 | 0.012 | 0.023 |
| 4 | 232,357 | 0.018 | 0.033 |
| 8 | 244,493 | 0.033 | 0.054 |
| 16 | 305,820 | 0.052 | 0.083 |
| 32 | 300,097 | 0.105 | 0.155 |
| 64 | 288,206 | 0.217 | 0.319 |
| 128 | 272,609 | 0.427 | 0.617 |
| 256 | 233,948 | 1.00 | 1.79 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 169,565 | 0.008 | 0.035 |
| 2 | 231,679 | 0.011 | 0.045 |
| 4 | 267,334 | 0.017 | 0.057 |
| 8 | 288,192 | 0.029 | 0.074 |
| 16 | 300,401 | 0.054 | 0.109 |
| 32 | 302,935 | 0.106 | 0.189 |
| 64 | 300,827 | 0.248 | 0.311 |
| 128 | 288,458 | 0.416 | 0.580 |
| 256 | 291,289 | 0.837 | 1.04 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 150,925 | 0.011 | 0.067 |
| 2 | 256,446 | 0.009 | 0.064 |
| 4 | 284,969 | 0.016 | 0.072 |
| 8 | 294,188 | 0.028 | 0.093 |
| 16 | 292,421 | 0.056 | 0.145 |
| 32 | 291,609 | 0.110 | 0.217 |
| 64 | 288,503 | 0.228 | 0.364 |
| 128 | 285,737 | 0.424 | 0.588 |
| 256 | 277,067 | 0.86 | 1.15 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 132,896 | 0.011 | 0.031 |
| 2 | 184,737 | 0.014 | 0.040 |
| 4 | 187,992 | 0.027 | 0.054 |
| 8 | 192,297 | 0.044 | 0.079 |
| 16 | 188,335 | 0.089 | 0.131 |
| 32 | 180,902 | 0.182 | 0.235 |
| 64 | 175,701 | 0.387 | 0.457 |
| 128 | 164,915 | 0.779 | 0.90 |
| 256 | 160,034 | 2.01 | 2.05 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 33,081 | 0.030 | 0.040 |
| 2 | 33,145 | 0.064 | 0.103 |
| 4 | 33,964 | 0.119 | 0.211 |
| 8 | 34,776 | 0.232 | 0.389 |
| 16 | 35,048 | 0.456 | 0.482 |
| 32 | 35,675 | 0.90 | 0.94 |
| 64 | 36,096 | 1.77 | 1.80 |
| 128 | 35,808 | 3.59 | 3.48 |
| 256 | 32,571 | 13.17 | 273.48 |
| Connections | 1st | 2nd | 3rd | 4th | 5th |
|---|---|---|---|---|---|
| 1 | 1Bun (canary)169,565 req/s |
2Rust163,701 req/s |
3Bun150,925 req/s |
4Node.js132,896 req/s |
5letloop131,731 req/s |
| 2 | 1Rust348,020 req/s |
2Bun256,446 req/s |
3Bun (canary)231,679 req/s |
4letloop212,046 req/s |
5Node.js184,737 req/s |
| 4 | 1Rust393,952 req/s |
2Bun284,969 req/s |
3Bun (canary)267,334 req/s |
4letloop232,357 req/s |
5Node.js187,992 req/s |
| 8 | 1Rust407,045 req/s |
2Bun294,188 req/s |
3Bun (canary)288,192 req/s |
4letloop244,493 req/s |
5Node.js192,297 req/s |
| 16 | 1Rust389,557 req/s |
2letloop305,820 req/s |
3Bun (canary)300,401 req/s |
4Bun292,421 req/s |
5Node.js188,335 req/s |
| 32 | 1Rust377,997 req/s |
2Bun (canary)302,935 req/s |
3letloop300,097 req/s |
4Bun291,609 req/s |
5Node.js180,902 req/s |
| 64 | 1Rust372,498 req/s |
2Bun (canary)300,827 req/s |
3Bun288,503 req/s |
4letloop288,206 req/s |
5Node.js175,701 req/s |
| 128 | 1Rust358,274 req/s |
2Bun (canary)288,458 req/s |
3Bun285,737 req/s |
4letloop272,609 req/s |
5Node.js164,915 req/s |
| 256 | 1Rust346,981 req/s |
2Bun (canary)291,289 req/s |
3Bun277,067 req/s |
4letloop233,948 req/s |
5Node.js160,034 req/s |