Counter application — single pinned core, 10s per concurrency level, wrk load generator
| # | Language | Framework | Peak req/s | @ conns | Avg (ms) | p99 (ms) | |
|---|---|---|---|---|---|---|---|
| 1 | C (h2o) | libh2o-evloop | 504,899 | 256 | 0.485 | 0.88 | |
| 2 | letloop | pico + io_uring | 448,768 | 64 | 0.137 | 0.159 | |
| 3 | Rust | axum + tokio | 410,948 | 8 | 0.019 | 0.021 | |
| 4 | Java (Vert.x) | Vert.x | 362,643 | 4 | 0.069 | 2.22 | |
| 5 | Bun (canary) | Bun.serve() (canary, Rust) | 316,374 | 64 | 0.215 | 0.299 | |
| 6 | Bun | Bun.serve() | 302,272 | 8 | 0.029 | 0.106 | |
| 7 | Deno | Deno.serve() | 264,358 | 8 | 0.029 | 0.036 | |
| 8 | Go | net/http (stdlib) | 224,278 | 8 | 0.037 | 0.090 | |
| 9 | Node.js | http (stdlib) | 192,824 | 4 | 0.027 | 0.052 | |
| 10 | Java (Loom) | HttpServer + virtual threads | 112,088 | 8 | 0.109 | 1.79 | |
| 11 | Gleam | mist + gleam_otp | 111,925 | 4 | 0.040 | 0.047 | |
| 12 | Common Lisp | Hunchentoot | 88,305 | 4 | 0.061 | 0.656 | |
| 13 | Racket | web-server (stdlib) | 68,474 | 16 | 0.234 | 0.279 | |
| 14 | FastAPI | uvicorn | 44,864 | 32 | 0.710 | 1.36 | |
| 15 | Ruby | Falcon (async) | 41,952 | 16 | 0.378 | 0.608 | |
| 16 | Flask | gunicorn (1 worker) | 12,397 | 1 | 0.083 | 0.107 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 172,752 | 0.012 | 0.033 |
| 2 | 330,660 | 0.007 | 0.010 |
| 4 | 398,228 | 0.010 | 0.013 |
| 8 | 411,089 | 0.015 | 0.024 |
| 16 | 492,297 | 0.146 | 2.69 |
| 32 | 486,479 | 0.067 | 0.126 |
| 64 | 490,070 | 0.128 | 0.250 |
| 128 | 493,294 | 0.238 | 0.457 |
| 256 | 504,899 | 0.485 | 0.88 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 163,988 | 0.006 | 0.008 |
| 2 | 326,854 | 0.007 | 0.009 |
| 4 | 401,648 | 0.009 | 0.012 |
| 8 | 422,523 | 0.016 | 0.020 |
| 16 | 446,988 | 0.037 | 0.047 |
| 32 | 448,392 | 0.069 | 0.090 |
| 64 | 448,768 | 0.137 | 0.159 |
| 128 | 429,720 | 0.270 | 0.433 |
| 256 | 396,001 | 0.588 | 0.843 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 142,561 | 0.009 | 0.009 |
| 2 | 366,798 | 0.005 | 0.008 |
| 4 | 399,368 | 0.010 | 0.011 |
| 8 | 410,948 | 0.019 | 0.021 |
| 16 | 386,443 | 0.044 | 0.045 |
| 32 | 364,713 | 0.087 | 0.093 |
| 64 | 356,554 | 0.412 | 0.232 |
| 128 | 357,334 | 0.327 | 0.385 |
| 256 | 341,019 | 0.685 | 0.96 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 134,461 | 0.035 | 1.19 |
| 2 | 328,274 | 0.063 | 2.22 |
| 4 | 362,643 | 0.069 | 2.22 |
| 8 | 360,192 | 0.095 | 2.47 |
| 16 | 353,607 | 0.104 | 2.25 |
| 32 | 351,927 | 0.152 | 2.43 |
| 64 | 348,055 | 0.257 | 2.77 |
| 128 | 339,698 | 0.422 | 3.20 |
| 256 | 331,354 | 0.793 | 4.09 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 127,939 | 0.011 | 0.033 |
| 2 | 227,555 | 0.009 | 0.030 |
| 4 | 276,453 | 0.016 | 0.049 |
| 8 | 304,994 | 0.026 | 0.056 |
| 16 | 311,187 | 0.052 | 0.102 |
| 32 | 315,307 | 0.101 | 0.181 |
| 64 | 316,374 | 0.215 | 0.299 |
| 128 | 304,681 | 0.393 | 0.563 |
| 256 | 279,722 | 0.86 | 1.09 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 120,344 | 0.013 | 0.063 |
| 2 | 252,272 | 0.013 | 0.089 |
| 4 | 291,298 | 0.015 | 0.075 |
| 8 | 302,272 | 0.029 | 0.106 |
| 16 | 295,739 | 0.060 | 0.195 |
| 32 | 295,356 | 0.109 | 0.226 |
| 64 | 293,695 | 0.225 | 0.370 |
| 128 | 286,612 | 0.443 | 0.637 |
| 256 | 280,967 | 0.86 | 1.19 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 100,436 | 0.013 | 0.015 |
| 2 | 201,872 | 0.010 | 0.016 |
| 4 | 241,437 | 0.016 | 0.019 |
| 8 | 264,358 | 0.029 | 0.036 |
| 16 | 258,101 | 0.062 | 0.092 |
| 32 | 248,565 | 0.129 | 0.175 |
| 64 | 244,864 | 0.265 | 0.306 |
| 128 | 239,777 | 0.517 | 0.599 |
| 256 | 233,156 | 1.03 | 1.22 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 105,340 | 0.019 | 0.114 |
| 2 | 213,846 | 0.010 | 0.030 |
| 4 | 222,673 | 0.020 | 0.057 |
| 8 | 224,278 | 0.037 | 0.090 |
| 16 | 215,993 | 0.078 | 0.177 |
| 32 | 213,764 | 0.150 | 0.317 |
| 64 | 207,669 | 0.315 | 0.655 |
| 128 | 201,046 | 0.585 | 1.25 |
| 256 | 190,086 | 1.25 | 2.17 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 106,893 | 0.029 | 0.794 |
| 2 | 182,658 | 0.022 | 0.056 |
| 4 | 192,824 | 0.027 | 0.052 |
| 8 | 191,393 | 0.049 | 0.089 |
| 16 | 190,017 | 0.090 | 0.162 |
| 32 | 185,213 | 0.178 | 0.239 |
| 64 | 182,036 | 0.361 | 0.427 |
| 128 | 172,841 | 0.732 | 0.86 |
| 256 | 167,911 | 1.84 | 1.73 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 84,387 | 0.059 | 1.82 |
| 2 | 96,575 | 0.051 | 1.34 |
| 4 | 106,732 | 0.066 | 1.29 |
| 8 | 112,088 | 0.109 | 1.79 |
| 16 | 110,510 | 0.184 | 2.03 |
| 32 | 110,808 | 0.336 | 2.55 |
| 64 | 110,624 | 0.638 | 3.10 |
| 128 | 107,113 | 1.14 | 3.63 |
| 256 | 94,478 | 3.36 | 6.98 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 71,225 | 0.024 | 0.281 |
| 2 | 88,821 | 0.032 | 0.294 |
| 4 | 111,925 | 0.040 | 0.047 |
| 8 | 111,761 | 0.077 | 0.085 |
| 16 | 111,031 | 0.147 | 0.177 |
| 32 | 111,364 | 0.287 | 0.312 |
| 64 | 109,786 | 0.572 | 0.610 |
| 128 | 107,234 | 1.09 | 1.33 |
| 256 | 102,144 | 2.35 | 2.89 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 64,151 | 0.038 | 0.95 |
| 2 | 83,844 | 0.044 | 0.764 |
| 4 | 88,305 | 0.061 | 0.656 |
| 8 | 87,096 | 0.110 | 0.799 |
| 16 | 87,334 | 0.193 | 0.596 |
| 32 | 86,044 | 0.385 | 1.05 |
| 64 | 83,876 | 0.799 | 2.51 |
| 128 | 79,019 | 1.61 | 6.91 |
| 256 | 74,224 | 6.17 | 57.53 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 58,305 | 0.027 | 0.285 |
| 2 | 65,760 | 0.040 | 0.229 |
| 4 | 67,393 | 0.065 | 0.125 |
| 8 | 67,770 | 0.121 | 0.250 |
| 16 | 68,474 | 0.234 | 0.279 |
| 32 | 66,980 | 0.477 | 0.546 |
| 64 | 66,400 | 0.94 | 1.49 |
| 128 | 66,044 | 1.77 | 3.38 |
| 256 | 62,518 | 3.73 | 7.12 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 34,919 | 0.031 | 0.041 |
| 2 | 41,431 | 0.051 | 0.079 |
| 4 | 40,756 | 0.106 | 0.443 |
| 8 | 42,352 | 0.188 | 0.252 |
| 16 | 43,858 | 0.364 | 0.608 |
| 32 | 44,864 | 0.710 | 1.36 |
| 64 | 44,140 | 1.46 | 2.43 |
| 128 | 44,556 | 2.85 | 5.07 |
| 256 | 43,156 | 8.70 | 140.71 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 34,233 | 0.049 | 0.668 |
| 2 | 38,907 | 0.064 | 0.321 |
| 4 | 40,345 | 0.105 | 0.314 |
| 8 | 41,334 | 0.197 | 0.427 |
| 16 | 41,952 | 0.378 | 0.608 |
| 32 | 41,832 | 0.764 | 1.00 |
| 64 | 39,698 | 1.58 | 1.85 |
| 128 | 36,912 | 3.19 | 3.31 |
| 256 | 36,501 | 7.96 | 35.21 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 12,397 | 0.083 | 0.107 |
| 2 | 11,959 | 0.172 | 0.408 |
| 4 | 12,019 | 0.335 | 0.468 |
| 8 | 11,982 | 0.669 | 1.08 |
| 16 | 12,113 | 1.32 | 1.50 |
| 32 | 11,941 | 2.68 | 2.98 |
| 64 | 11,407 | 5.52 | 6.12 |
| 128 | 10,565 | 11.02 | 12.38 |
| 256 | 9,710 | 23.99 | 26.92 |
| Connections | 1st | 2nd | 3rd | 4th | 5th |
|---|---|---|---|---|---|
| 1 | 1C (h2o)172,752 req/s |
2letloop163,988 req/s |
3Rust142,561 req/s |
4Java (Vert.x)134,461 req/s |
5Bun (canary)127,939 req/s |
| 2 | 1Rust366,798 req/s |
2C (h2o)330,660 req/s |
3Java (Vert.x)328,274 req/s |
4letloop326,854 req/s |
5Bun252,272 req/s |
| 4 | 1letloop401,648 req/s |
2Rust399,368 req/s |
3C (h2o)398,228 req/s |
4Java (Vert.x)362,643 req/s |
5Bun291,298 req/s |
| 8 | 1letloop422,523 req/s |
2C (h2o)411,089 req/s |
3Rust410,948 req/s |
4Java (Vert.x)360,192 req/s |
5Bun (canary)304,994 req/s |
| 16 | 1C (h2o)492,297 req/s |
2letloop446,988 req/s |
3Rust386,443 req/s |
4Java (Vert.x)353,607 req/s |
5Bun (canary)311,187 req/s |
| 32 | 1C (h2o)486,479 req/s |
2letloop448,392 req/s |
3Rust364,713 req/s |
4Java (Vert.x)351,927 req/s |
5Bun (canary)315,307 req/s |
| 64 | 1C (h2o)490,070 req/s |
2letloop448,768 req/s |
3Rust356,554 req/s |
4Java (Vert.x)348,055 req/s |
5Bun (canary)316,374 req/s |
| 128 | 1C (h2o)493,294 req/s |
2letloop429,720 req/s |
3Rust357,334 req/s |
4Java (Vert.x)339,698 req/s |
5Bun (canary)304,681 req/s |
| 256 | 1C (h2o)504,899 req/s |
2letloop396,001 req/s |
3Rust341,019 req/s |
4Java (Vert.x)331,354 req/s |
5Bun280,967 req/s |