Counter application — single-threaded, 10s per concurrency level, wrk load generator
| # | Language | Framework | Peak req/s | @ conns | Avg (ms) | p99 (ms) | |
|---|---|---|---|---|---|---|---|
| 1 | C (h2o) | libh2o-evloop | 411,965 | 8 | 0.017 | 0.028 | |
| 2 | Rust | axum + tokio | 316,506 | 8 | 0.026 | 0.039 | |
| 3 | Java (Vert.x) | Vert.x | 277,621 | 8 | 0.099 | 2.47 | |
| 4 | Bun | Bun.serve() | 230,697 | 8 | 0.036 | 0.130 | |
| 5 | Scheme | pico + io_uring | 222,365 | 16 | 0.071 | 0.110 | |
| 6 | Deno | Deno.serve() | 208,723 | 8 | 0.039 | 0.086 | |
| 7 | Go | net/http (stdlib) | 178,119 | 8 | 0.047 | 0.137 | |
| 8 | Node.js | http (stdlib) | 141,993 | 8 | 0.063 | 0.126 | |
| 9 | Gleam | mist + gleam_otp | 88,743 | 2 | 0.023 | 0.033 | |
| 10 | Common Lisp | Hunchentoot | 48,918 | 8 | 0.155 | 0.250 | |
| 11 | FastAPI | uvicorn | 47,968 | 64 | 1.33 | 1.75 | |
| 12 | Java (Loom) | HttpServer + virtual threads | 44,662 | 256 | 11.43 | 42.27 | |
| 13 | Ruby | Falcon (async) | 32,800 | 16 | 0.486 | 0.771 | |
| 14 | Racket | web-server (stdlib) | 30,849 | 16 | 0.733 | 1.89 | |
| 15 | Flask | gunicorn (1 worker) | 11,956 | 8 | 0.660 | 0.812 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 144,672 | 0.007 | 0.009 |
| 2 | 342,465 | 0.006 | 0.009 |
| 4 | 391,204 | 0.010 | 0.014 |
| 8 | 411,965 | 0.017 | 0.028 |
| 16 | 397,669 | 0.079 | 1.81 |
| 32 | 379,993 | 0.084 | 0.163 |
| 64 | 385,252 | 0.162 | 0.317 |
| 128 | 370,107 | 0.316 | 0.578 |
| 256 | 370,045 | 0.670 | 0.87 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 126,194 | 0.010 | 0.026 |
| 2 | 278,756 | 0.009 | 0.014 |
| 4 | 308,841 | 0.014 | 0.029 |
| 8 | 316,506 | 0.026 | 0.039 |
| 16 | 298,983 | 0.056 | 0.106 |
| 32 | 294,922 | 0.109 | 0.155 |
| 64 | 296,626 | 0.212 | 0.283 |
| 128 | 284,861 | 0.410 | 0.503 |
| 256 | 279,636 | 0.836 | 1.03 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 126,309 | 0.055 | 1.82 |
| 2 | 241,491 | 0.092 | 2.52 |
| 4 | 265,360 | 0.103 | 2.59 |
| 8 | 277,621 | 0.099 | 2.47 |
| 16 | 269,709 | 0.140 | 2.59 |
| 32 | 274,920 | 0.177 | 2.41 |
| 64 | 266,481 | 0.319 | 2.91 |
| 128 | 259,299 | 0.558 | 3.69 |
| 256 | 246,170 | 1.07 | 4.56 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 119,358 | 0.010 | 0.082 |
| 2 | 200,261 | 0.012 | 0.098 |
| 4 | 222,170 | 0.019 | 0.094 |
| 8 | 230,697 | 0.036 | 0.130 |
| 16 | 226,257 | 0.073 | 0.216 |
| 32 | 226,297 | 0.142 | 0.317 |
| 64 | 230,107 | 0.284 | 0.445 |
| 128 | 222,555 | 0.540 | 0.810 |
| 256 | 220,414 | 1.09 | 1.41 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 108,397 | 0.011 | 0.027 |
| 2 | 161,105 | 0.014 | 0.032 |
| 4 | 209,966 | 0.019 | 0.037 |
| 8 | 215,618 | 0.036 | 0.061 |
| 16 | 222,365 | 0.071 | 0.110 |
| 32 | 221,382 | 0.143 | 0.211 |
| 64 | 212,670 | 0.294 | 0.412 |
| 128 | 211,276 | 0.550 | 0.687 |
| 256 | 204,960 | 1.13 | 1.39 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 91,323 | 0.012 | 0.038 |
| 2 | 159,876 | 0.014 | 0.046 |
| 4 | 175,672 | 0.024 | 0.071 |
| 8 | 208,723 | 0.039 | 0.086 |
| 16 | 203,272 | 0.079 | 0.142 |
| 32 | 198,107 | 0.162 | 0.253 |
| 64 | 190,716 | 0.340 | 0.495 |
| 128 | 184,191 | 0.642 | 0.88 |
| 256 | 185,278 | 1.26 | 1.67 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 108,364 | 0.010 | 0.032 |
| 2 | 173,898 | 0.013 | 0.054 |
| 4 | 177,225 | 0.025 | 0.085 |
| 8 | 178,119 | 0.047 | 0.137 |
| 16 | 170,107 | 0.098 | 0.258 |
| 32 | 167,042 | 0.195 | 0.472 |
| 64 | 165,263 | 0.387 | 0.88 |
| 128 | 159,520 | 0.744 | 1.62 |
| 256 | 153,473 | 1.54 | 2.76 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 109,249 | 0.014 | 0.047 |
| 2 | 136,410 | 0.021 | 0.061 |
| 4 | 138,715 | 0.037 | 0.096 |
| 8 | 141,993 | 0.063 | 0.126 |
| 16 | 141,028 | 0.121 | 0.206 |
| 32 | 139,651 | 0.239 | 0.371 |
| 64 | 135,504 | 0.504 | 0.722 |
| 128 | 134,333 | 1.00 | 1.51 |
| 256 | 131,666 | 2.63 | 9.66 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 59,027 | 0.018 | 0.045 |
| 2 | 88,743 | 0.023 | 0.033 |
| 4 | 85,989 | 0.048 | 0.079 |
| 8 | 86,758 | 0.092 | 0.143 |
| 16 | 86,639 | 0.184 | 0.236 |
| 32 | 85,734 | 0.373 | 0.467 |
| 64 | 84,955 | 0.756 | 0.97 |
| 128 | 82,956 | 1.43 | 1.75 |
| 256 | 83,257 | 3.05 | 3.36 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 32,939 | 0.022 | 0.045 |
| 2 | 48,770 | 0.034 | 0.092 |
| 4 | 48,789 | 0.075 | 0.158 |
| 8 | 48,918 | 0.155 | 0.250 |
| 16 | 48,429 | 0.322 | 0.512 |
| 32 | 47,993 | 0.651 | 0.811 |
| 64 | 47,893 | 4.10 | 55.14 |
| 128 | 25,182 | 37.95 | 615.11 |
| 256 | 32,274 | 28.74 | 615.62 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 36,632 | 0.028 | 0.038 |
| 2 | 43,534 | 0.046 | 0.060 |
| 4 | 43,501 | 0.091 | 0.118 |
| 8 | 44,993 | 0.177 | 0.249 |
| 16 | 46,746 | 0.341 | 0.613 |
| 32 | 46,223 | 0.693 | 0.809 |
| 64 | 47,968 | 1.33 | 1.75 |
| 128 | 46,845 | 2.70 | 4.77 |
| 256 | 47,564 | 7.98 | 130.03 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 24 | 41.04 | 44.08 |
| 2 | 49 | 40.99 | 43.91 |
| 4 | 97 | 40.98 | 43.03 |
| 8 | 195 | 41.04 | 44.00 |
| 16 | 388 | 41.07 | 44.56 |
| 32 | 777 | 41.12 | 44.97 |
| 64 | 1,517 | 41.16 | 44.05 |
| 128 | 2,802 | 41.15 | 44.96 |
| 256 | 44,662 | 11.43 | 42.27 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 29,438 | 0.038 | 0.226 |
| 2 | 30,535 | 0.069 | 0.291 |
| 4 | 31,492 | 0.130 | 0.384 |
| 8 | 32,003 | 0.250 | 0.522 |
| 16 | 32,800 | 0.486 | 0.771 |
| 32 | 32,732 | 0.97 | 1.32 |
| 64 | 31,033 | 2.07 | 2.41 |
| 128 | 29,138 | 4.13 | 4.43 |
| 256 | 28,029 | 11.98 | 164.18 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 28,041 | 0.265 | 1.03 |
| 2 | 29,858 | 0.367 | 1.66 |
| 4 | 28,954 | 0.392 | 1.61 |
| 8 | 30,489 | 0.511 | 1.66 |
| 16 | 30,849 | 0.733 | 1.89 |
| 32 | 28,207 | 1.39 | 2.92 |
| 64 | 27,331 | 2.54 | 5.69 |
| 128 | 25,305 | 4.88 | 9.91 |
| 256 | 23,543 | 10.12 | 20.91 |
| Conns | Req/s | Avg (ms) | p99 (ms) |
|---|---|---|---|
| 1 | 11,774 | 0.077 | 0.153 |
| 2 | 11,772 | 0.162 | 0.268 |
| 4 | 11,917 | 0.327 | 0.448 |
| 8 | 11,956 | 0.660 | 0.812 |
| 16 | 11,939 | 1.33 | 1.56 |
| 32 | 11,905 | 2.68 | 2.95 |
| 64 | 11,855 | 5.30 | 6.08 |
| 128 | 11,882 | 9.79 | 10.76 |
| 256 | 11,116 | 20.86 | 22.04 |
| Connections | 1st | 2nd | 3rd | 4th | 5th |
|---|---|---|---|---|---|
| 1 | 1C (h2o)144,672 req/s |
2Java (Vert.x)126,309 req/s |
3Rust126,194 req/s |
4Bun119,358 req/s |
5Node.js109,249 req/s |
| 2 | 1C (h2o)342,465 req/s |
2Rust278,756 req/s |
3Java (Vert.x)241,491 req/s |
4Bun200,261 req/s |
5Go173,898 req/s |
| 4 | 1C (h2o)391,204 req/s |
2Rust308,841 req/s |
3Java (Vert.x)265,360 req/s |
4Bun222,170 req/s |
5Scheme209,966 req/s |
| 8 | 1C (h2o)411,965 req/s |
2Rust316,506 req/s |
3Java (Vert.x)277,621 req/s |
4Bun230,697 req/s |
5Scheme215,618 req/s |
| 16 | 1C (h2o)397,669 req/s |
2Rust298,983 req/s |
3Java (Vert.x)269,709 req/s |
4Bun226,257 req/s |
5Scheme222,365 req/s |
| 32 | 1C (h2o)379,993 req/s |
2Rust294,922 req/s |
3Java (Vert.x)274,920 req/s |
4Bun226,297 req/s |
5Scheme221,382 req/s |
| 64 | 1C (h2o)385,252 req/s |
2Rust296,626 req/s |
3Java (Vert.x)266,481 req/s |
4Bun230,107 req/s |
5Scheme212,670 req/s |
| 128 | 1C (h2o)370,107 req/s |
2Rust284,861 req/s |
3Java (Vert.x)259,299 req/s |
4Bun222,555 req/s |
5Scheme211,276 req/s |
| 256 | 1C (h2o)370,045 req/s |
2Rust279,636 req/s |
3Java (Vert.x)246,170 req/s |
4Bun220,414 req/s |
5Scheme204,960 req/s |