Nift
Native threads, snapshot captures, async pool, shared atomic/mutex handles.
Concurrency / control room
Nift · Python · Node · Bun · Go
Equivalent problems. Different execution models.
Execution lanes are a schematic. Charts below contain measured results; no overall concurrency score.
Execution models
Native threads, snapshot captures, async pool, shared atomic/mutex handles.
asyncio waits, spawn processes for CPU, threads for files/processes; ordinary GIL build.
Promises and timers for waits; worker_threads for CPU and SAB atomics.
Compiled goroutines, channels, sync and atomic primitives.
01 / schedule
Creating, joining and collecting zero-work tasks. Request/response serialization is included; these are not engine-internal scheduler nanoseconds.
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 10 tasks | 3.386 | 1.175 | 2.167 | 10.463 | 0.996 |
| 100 tasks | 16.420 | 1.588 | 2.462 | 10.873 | 1.237 |
| 1000 tasks | 307.242 | 7.303 | 7.088 | 12.209 | 2.927 |
| 10000 tasks | 28,018.832 | 60.991 | 27.373 | 22.248 | 17.989 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 10 tasks | 9.247 | 78.426 | 47.456 | 31.018 | 5.069 |
| 100 tasks | 24.933 | 82.059 | 50.726 | 33.035 | 6.102 |
| 1000 tasks | 262.728 | 84.288 | 53.352 | 33.233 | 7.482 |
| 10000 tasks | 31,801.965 | 152.812 | 90.284 | 49.711 | 29.027 |
02 / tiny
Eight exact recurrence iterations per job. Large task sets are expensive stress cells with five samples for every participant.
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 10 tasks | 3.455 | 1.176 | 2.218 | 10.176 | 1.027 |
| 100 tasks | 14.801 | 1.794 | 2.492 | 11.122 | 1.189 |
| 1000 tasks | 328.279 | 8.694 | 7.282 | 12.648 | 3.060 |
| 10000 tasks | 30,949.017 | 79.362 | 30.016 | 24.363 | 17.781 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 10 tasks | 9.562 | 79.887 | 48.438 | 31.295 | 5.650 |
| 100 tasks | 22.951 | 80.094 | 50.220 | 32.315 | 6.296 |
| 1000 tasks | 305.413 | 87.725 | 55.099 | 34.529 | 7.802 |
| 10000 tasks | 28,070.537 | 174.452 | 100.663 | 56.692 | 26.474 |
03 / fan
Every branch has a unique ID. The oracle checks exact values, missing work and duplicate results. This is the same flat create/join shape as tiny arithmetic, retained as a separately sampled fan-out cohort; it does not imply a different executor capability.
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 10 tasks | 3.423 | 1.139 | 2.169 | 10.309 | 1.017 |
| 100 tasks | 15.317 | 1.727 | 2.527 | 11.168 | 1.301 |
| 1000 tasks | 326.726 | 8.551 | 7.106 | 12.730 | 3.012 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 10 tasks | 10.132 | 81.575 | 50.164 | 31.926 | 6.198 |
| 100 tasks | 21.487 | 79.849 | 49.517 | 32.261 | 6.001 |
| 1000 tasks | 332.009 | 87.864 | 55.616 | 34.853 | 8.465 |
04 / wait
Nift blocking sleeps occupy native async workers. Event loops suspend promises/tasks and Go suspends goroutines. Equivalent waits do not imply parallel computation. On this four-worker native pool, 1000 × 10ms blocking sleeps have a 2500ms work/worker lower bound; suspended timers have a 10ms critical-path floor before scheduling and result overhead.
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 100 × 10ms | 259.228 | 14.071 | 13.246 | 21.208 | 11.983 |
| 1000 × 10ms | 2,579.520 | 19.895 | 19.883 | 23.001 | 14.699 |
| stagger-100 | 279.978 | 24.250 | 22.569 | 31.034 | 22.084 |
| mixed-wait-100 | 89.301 | 23.770 | 22.950 | 30.905 | 21.560 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 100 × 10ms | 265.538 | 93.046 | 60.104 | 42.865 | 16.308 |
| 1000 × 10ms | 2,607.229 | 101.885 | 71.870 | 45.710 | 20.775 |
| stagger-100 | 287.428 | 106.644 | 72.380 | 53.630 | 27.091 |
| mixed-wait-100 | 96.292 | 104.898 | 69.675 | 51.960 | 26.670 |
05 / cpu
The same 64 × 200000-iteration kernel at one, two and four workers. Python uses ordinary-GIL multiprocessing; Node/Bun use worker isolates. Pools are created inside each request.
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 1 worker | 10,913.016 | 2,017.077 | 302.906 | 408.384 | 52.855 |
| 2 workers | 5,409.673 | 1,085.507 | 187.179 | 224.621 | 27.516 |
| 4 workers | 2,866.414 | 650.775 | 138.874 | 151.449 | 15.379 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 1 worker | 10,808.906 | 2,153.575 | 389.720 | 437.490 | 60.939 |
| 2 workers | 5,540.975 | 1,189.158 | 243.955 | 256.840 | 33.680 |
| 4 workers | 2,836.492 | 747.548 | 196.533 | 172.352 | 24.128 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 1 worker | 1.000 | 1.000 | 1.000 | 1.000 | 1.000 |
| 2 workers | 2.017 | 1.858 | 1.618 | 1.818 | 1.921 |
| 4 workers | 3.807 | 3.099 | 2.181 | 2.697 | 3.437 |
Four-worker efficiency: Nift 95.2%, Python 77.5%, Node 54.5%, Bun 67.4%, Go 85.9%. Ratios of measured medians, without a significance claim.
06 / pool
One, two or four workers dispatch a fixed 64-job set. Light, medium and heavy bodies reveal the tradeoff between pool setup and useful computation.
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| light / 4 workers | 7.999 | 128.447 | 66.246 | 47.611 | 1.228 |
| medium / 4 workers | 11.229 | 130.966 | 69.215 | 51.931 | 1.273 |
| heavy / 4 workers | 79.305 | 139.645 | 72.620 | 51.681 | 1.870 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| light / 1 workers | 22.009 | 109.794 | 53.991 | 37.155 | 0.986 |
| light / 2 workers | 13.016 | 112.365 | 55.025 | 41.548 | 1.159 |
| light / 4 workers | 7.999 | 128.447 | 66.246 | 47.611 | 1.228 |
| medium / 1 workers | 32.585 | 107.729 | 57.328 | 37.708 | 1.160 |
| medium / 2 workers | 18.445 | 117.173 | 56.278 | 41.672 | 1.224 |
| medium / 4 workers | 11.229 | 130.966 | 69.215 | 51.931 | 1.273 |
| heavy / 1 workers | 292.299 | 155.070 | 62.232 | 50.323 | 2.418 |
| heavy / 2 workers | 150.488 | 136.793 | 63.350 | 47.970 | 1.922 |
| heavy / 4 workers | 79.305 | 139.645 | 72.620 | 51.681 | 1.870 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| light / 1 workers | 27.963 | 200.051 | 102.878 | 61.386 | 6.116 |
| light / 2 workers | 18.795 | 203.357 | 105.509 | 63.839 | 6.037 |
| light / 4 workers | 15.331 | 224.685 | 120.384 | 72.588 | 6.809 |
| medium / 1 workers | 39.620 | 200.803 | 104.525 | 61.275 | 6.223 |
| medium / 2 workers | 25.048 | 202.786 | 106.196 | 65.187 | 6.736 |
| medium / 4 workers | 17.677 | 219.188 | 121.887 | 72.550 | 7.024 |
| heavy / 1 workers | 294.398 | 241.386 | 109.823 | 70.071 | 7.267 |
| heavy / 2 workers | 155.047 | 226.869 | 110.549 | 69.714 | 7.455 |
| heavy / 4 workers | 87.258 | 240.520 | 128.474 | 77.940 | 8.094 |
07 / queue
Capacity 64. Go uses channels, Python queue.Queue, JS an authored cooperative promise queue. Nift uses a mutex-protected ring and 1ms empty/full backoff; this is a documented channel/condition-variable gap.
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 1000 / 4→4 | 8,302.953 | 138,121.919 | 186,012.960 | 82,608.393 | 471,133.642 |
| 10000 / 4→4 | 8,575.651 | 249,727.815 | 667,403.658 | 586,439.926 | 794,127.175 |
| 100000 / 4→4 | 8,450.381 | 303,244.394 | 1,159,468.241 | 1,606,891.404 | 738,741.460 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 1000 / 1→1 | 9,471.990 | 201,884.511 | 183,553.884 | 82,964.336 | 463,780.806 |
| 1000 / 1→4 | 8,429.501 | 140,775.010 | 178,083.147 | 79,686.770 | 477,462.573 |
| 1000 / 4→1 | 8,267.213 | 147,389.942 | 189,910.709 | 80,286.153 | 466,516.697 |
| 1000 / 4→4 | 8,302.953 | 138,121.919 | 186,012.960 | 82,608.393 | 471,133.642 |
| 10000 / 1→1 | 9,426.780 | 327,125.505 | 602,289.725 | 608,096.717 | 829,867.564 |
| 10000 / 1→4 | 8,883.983 | 239,873.733 | 561,229.776 | 488,986.353 | 775,055.460 |
| 10000 / 4→1 | 8,911.875 | 263,957.516 | 585,037.633 | 520,979.832 | 819,374.873 |
| 10000 / 4→4 | 8,575.651 | 249,727.815 | 667,403.658 | 586,439.926 | 794,127.175 |
| 100000 / 1→1 | 9,523.300 | 350,464.495 | 1,005,108.615 | 1,630,183.008 | 826,498.555 |
| 100000 / 1→4 | 8,817.730 | 268,575.563 | 822,043.991 | 1,303,221.973 | 766,872.118 |
| 100000 / 4→1 | 8,559.040 | 277,282.710 | 904,841.551 | 1,412,209.269 | 797,427.035 |
| 100000 / 4→4 | 8,450.381 | 303,244.394 | 1,159,468.241 | 1,606,891.404 | 738,741.460 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 1000 / 1→1 | 111.501 | 83.256 | 53.275 | 33.679 | 7.568 |
| 1000 / 1→4 | 124.766 | 84.715 | 52.643 | 33.886 | 7.466 |
| 1000 / 4→1 | 123.900 | 86.000 | 54.008 | 35.137 | 7.602 |
| 1000 / 4→4 | 127.220 | 87.824 | 54.192 | 34.656 | 7.802 |
| 10000 / 1→1 | 1,055.303 | 110.053 | 63.886 | 41.487 | 17.842 |
| 10000 / 1→4 | 1,135.537 | 124.680 | 69.831 | 45.544 | 18.203 |
| 10000 / 4→1 | 1,131.324 | 121.596 | 68.671 | 42.892 | 18.852 |
| 10000 / 4→4 | 1,155.861 | 121.093 | 63.869 | 42.028 | 19.388 |
| 100000 / 1→1 | 10,301.036 | 348.083 | 149.231 | 94.491 | 140.976 |
| 100000 / 1→4 | 11,194.095 | 488.286 | 184.522 | 105.096 | 139.180 |
| 100000 / 4→1 | 11,790.827 | 474.472 | 171.677 | 106.541 | 145.940 |
| 100000 / 4→4 | 11,409.928 | 430.560 | 147.928 | 95.760 | 137.659 |
08 / sync
Genuine shared atomics only. Python atomic cells and JS native-mutex cells are unavailable (—). Mutex critical sections contain one or eight increments; all counts are exact.
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| atomic / 1 workers | 131.817 | — | 49.534 | 35.116 | 0.925 |
| atomic / 2 workers | 75.267 | — | 51.180 | 37.086 | 1.066 |
| atomic / 4 workers | 46.155 | — | 64.564 | 46.138 | 1.096 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| atomic / 1 workers | 131.817 | — | 49.534 | 35.116 | 0.925 |
| atomic / 2 workers | 75.267 | — | 51.180 | 37.086 | 1.066 |
| atomic / 4 workers | 46.155 | — | 64.564 | 46.138 | 1.096 |
| mutex / 1 increments / 1 workers | 181.676 | 3.365 | — | — | 1.100 |
| mutex / 1 increments / 2 workers | 211.752 | 3.428 | — | — | 1.000 |
| mutex / 1 increments / 4 workers | 221.810 | 4.092 | — | — | 1.065 |
| mutex / 8 increments / 1 workers | 225.666 | 5.220 | — | — | 1.131 |
| mutex / 8 increments / 2 workers | 253.594 | 5.366 | — | — | 0.963 |
| mutex / 8 increments / 4 workers | 275.163 | 6.144 | — | — | 1.160 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| atomic / 1 workers | 136.998 | — | 98.911 | 58.434 | 7.806 |
| atomic / 2 workers | 88.338 | — | 106.761 | 66.686 | 9.706 |
| atomic / 4 workers | 56.591 | — | 122.151 | 73.854 | 9.178 |
| mutex / 1 increments / 1 workers | 189.402 | 85.797 | — | — | 8.400 |
| mutex / 1 increments / 2 workers | 221.586 | 86.153 | — | — | 8.150 |
| mutex / 1 increments / 4 workers | 241.708 | 88.852 | — | — | 9.044 |
| mutex / 8 increments / 1 workers | 233.246 | 93.979 | — | — | 8.173 |
| mutex / 8 increments / 2 workers | 268.413 | 87.318 | — | — | 8.577 |
| mutex / 8 increments / 4 workers | 274.308 | 87.732 | — | — | 8.942 |
09 / process
Four concurrent argv-launched identical helpers. No shell startup. Every stdout value and expected exit status is checked, including failures.
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| process-10 | 12.219 | 15.736 | 29.721 | 22.508 | 5.103 |
| process-100 | 96.926 | 59.507 | 186.840 | 80.517 | 37.541 |
| process-1000 | 1,001.112 | 473.958 | 1,799.078 | 474.508 | 336.399 |
| process-mixed | 119.138 | 92.138 | 195.111 | 101.676 | 79.699 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| process-10 | 12.219 | 15.736 | 29.721 | 22.508 | 5.103 |
| process-100 | 96.926 | 59.507 | 186.840 | 80.517 | 37.541 |
| process-1000 | 1,001.112 | 473.958 | 1,799.078 | 474.508 | 336.399 |
| process-mixed | 119.138 | 92.138 | 195.111 | 101.676 | 79.699 |
| process-one-failure | 99.520 | 60.143 | 198.760 | 78.627 | 37.004 |
| process-many-failures | 90.312 | 54.818 | 167.992 | 78.885 | 35.990 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| process-10 | 18.349 | 95.740 | 72.240 | 44.331 | 11.067 |
| process-100 | 103.223 | 140.112 | 232.774 | 99.935 | 41.563 |
| process-1000 | 986.584 | 565.422 | 1,812.565 | 505.097 | 330.704 |
| process-mixed | 128.148 | 179.045 | 246.060 | 128.590 | 86.627 |
| process-one-failure | 106.171 | 141.927 | 239.718 | 101.488 | 42.926 |
| process-many-failures | 107.500 | 143.894 | 232.830 | 101.634 | 44.054 |
10 / files
Pregenerated 128-byte files, exact byte hashes, four concurrent operations. This is cached runtime/file orchestration, not a disk benchmark.
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 100 files | 22.697 | 20.172 | 16.875 | 15.210 | 1.960 |
| 1000 files | 145.382 | 107.014 | 78.292 | 27.755 | 7.999 |
| 10000 files | 1,446.824 | 1,035.882 | 707.063 | 129.665 | 72.407 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 100 files | 25.029 | 103.158 | 62.293 | 37.517 | 7.730 |
| 1000 files | 154.370 | 203.517 | 142.590 | 53.414 | 14.787 |
| 10000 files | 1,461.296 | 1,146.536 | 762.058 | 150.654 | 79.597 |
11 / mixed
Mixed jobs combine arithmetic, a wait and a child process. Nested parents create four children. Failures collect all outcomes and let successful siblings finish.
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| mixed-64 | 93.279 | 62.732 | 152.317 | 76.427 | 58.540 |
| nested-10 | 7.498 | 1.395 | 2.056 | 10.497 | 1.045 |
| nested-100 | 53.653 | 5.680 | 4.181 | 10.860 | 1.855 |
| failures | 3.613 | 1.369 | 2.301 | 10.564 | 1.123 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| mixed-64 | 102.416 | 153.033 | 209.018 | 105.128 | 68.290 |
| nested-10 | 17.150 | 83.028 | 52.072 | 34.061 | 8.091 |
| nested-100 | 68.969 | 88.458 | 53.644 | 34.993 | 9.755 |
| failures | 11.878 | 82.015 | 50.756 | 33.731 | 7.823 |
12 / memory
All tasks are staged behind a gate while tree RSS is sampled. Final Nift10k held tasks are outside the certified matrix: a separate probe timed out before READY at45seconds with sampled peak4,137.840MiB below its6GiBguard. This time-censored diagnostic is not a plotted wall/memory result or proof of8GiBinfeasibility. Queued Nift futures need not have started running. Shared pages may be double-counted; this is not unique physical memory.
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 100 held tasks | 10.125 | 20.824 | 48.547 | 22.875 | 3.000 |
| 1000 held tasks | 143.625 | 21.953 | 50.000 | 25.250 | 5.375 |
| 10000 held tasks | — | 31.574 | 54.922 | 29.000 | 29.375 |
| Workload | Nift | Python | Node | Bun | Go |
|---|---|---|---|---|---|
| 1 worker | 7.125 | 58.266 | 71.250 | 38.605 | 3.125 |
| 2 workers | 7.250 | 79.711 | 84.250 | 41.984 | 3.125 |
| 4 workers | 7.750 | 122.859 | 110.297 | 50.590 | 3.125 |
Unranked5ms sampled peak accounting, separate from post-READY held checkpoints. Pre-exec supervisor floors and shared mappings can distort it; it cannot rank memory efficiency. The final noop control rose16.75→80.75MiB for0→64MiBparent allocation; no subtraction.
Supporting distributions
| Case / boundary / runtime | Median ms | p95 ms | Min–max ms | CPU ms | Sampled tree MiB | n |
|---|---|---|---|---|---|---|
| schedule-10 / persistent / nift | 3.386 | 3.964 | 2.981–8.948 | 0.000 | 6.500 | 50 |
| schedule-10 / persistent / python | 1.175 | 1.607 | 1.013–1.869 | 0.000 | 20.074 | 50 |
| schedule-10 / persistent / node | 2.167 | 2.516 | 1.921–3.163 | 0.000 | 48.500 | 50 |
| schedule-10 / persistent / bun | 10.463 | 12.853 | 9.642–18.075 | 10.000 | 20.375 | 50 |
| schedule-10 / persistent / go | 0.996 | 1.430 | 0.793–1.926 | 0.000 | 2.750 | 50 |
| schedule-100 / persistent / nift | 16.420 | 19.265 | 11.951–21.324 | 40.000 | 7.875 | 50 |
| schedule-100 / persistent / python | 1.588 | 1.959 | 1.435–2.142 | 0.000 | 20.074 | 50 |
| schedule-100 / persistent / node | 2.462 | 2.756 | 1.879–3.460 | 0.000 | 48.461 | 50 |
| schedule-100 / persistent / bun | 10.873 | 12.282 | 10.279–14.478 | 10.000 | 20.375 | 50 |
| schedule-100 / persistent / go | 1.237 | 1.441 | 1.031–1.613 | 0.000 | 2.750 | 50 |
| schedule-1000 / persistent / nift | 307.242 | 380.201 | 195.434–390.642 | 650.000 | 9.406 | 50 |
| schedule-1000 / persistent / python | 7.303 | 10.272 | 6.835–26.839 | 10.000 | 21.824 | 50 |
| schedule-1000 / persistent / node | 7.088 | 10.188 | 5.084–10.843 | 10.000 | 50.250 | 50 |
| schedule-1000 / persistent / bun | 12.209 | 14.270 | 11.634–20.376 | 20.000 | 26.312 | 50 |
| schedule-1000 / persistent / go | 2.927 | 6.407 | 2.346–7.772 | 0.000 | 2.750 | 50 |
| schedule-10000 / persistent / nift | 28,018.832 | 32,719.509 | 22,282.891–32,719.509 | 41,140.000 | 28.230 | 5 |
| schedule-10000 / persistent / python | 60.991 | 69.473 | 60.011–69.473 | 70.000 | 31.055 | 5 |
| schedule-10000 / persistent / node | 27.373 | 37.807 | 24.983–37.807 | 40.000 | 61.172 | 5 |
| schedule-10000 / persistent / bun | 22.248 | 23.734 | 17.742–23.734 | 40.000 | 31.625 | 5 |
| schedule-10000 / persistent / go | 17.989 | 19.897 | 15.842–19.897 | 20.000 | 7.625 | 5 |
| tiny-10 / persistent / nift | 3.455 | 4.472 | 3.020–7.139 | 0.000 | 6.500 | 50 |
| tiny-10 / persistent / python | 1.176 | 1.409 | 1.029–1.864 | 0.000 | 20.074 | 50 |
| tiny-10 / persistent / node | 2.218 | 2.679 | 1.812–3.377 | 0.000 | 48.422 | 50 |
| tiny-10 / persistent / bun | 10.176 | 10.818 | 9.667–11.815 | 10.000 | 20.375 | 50 |
| tiny-10 / persistent / go | 1.027 | 1.361 | 0.849–1.501 | 0.000 | 2.750 | 50 |
| tiny-100 / persistent / nift | 14.801 | 19.023 | 12.473–20.980 | 40.000 | 8.125 | 50 |
| tiny-100 / persistent / python | 1.794 | 2.073 | 1.554–2.497 | 0.000 | 20.078 | 50 |
| tiny-100 / persistent / node | 2.492 | 2.910 | 2.170–3.144 | 0.000 | 48.422 | 50 |
| tiny-100 / persistent / bun | 11.122 | 12.760 | 10.267–15.504 | 10.000 | 20.375 | 50 |
| tiny-100 / persistent / go | 1.189 | 1.426 | 1.037–1.749 | 0.000 | 2.750 | 50 |
| tiny-1000 / persistent / nift | 328.279 | 380.190 | 227.809–387.412 | 690.000 | 9.408 | 50 |
| tiny-1000 / persistent / python | 8.694 | 9.802 | 8.211–9.920 | 10.000 | 21.824 | 50 |
| tiny-1000 / persistent / node | 7.282 | 9.825 | 5.660–10.248 | 10.000 | 50.523 | 50 |
| tiny-1000 / persistent / bun | 12.648 | 13.777 | 11.920–19.203 | 20.000 | 26.500 | 50 |
| tiny-1000 / persistent / go | 3.060 | 3.595 | 2.388–3.963 | 0.000 | 2.750 | 50 |
| tiny-10000 / persistent / nift | 30,949.017 | 31,913.558 | 23,136.945–31,913.558 | 45,710.000 | 27.426 | 5 |
| tiny-10000 / persistent / python | 79.362 | 84.364 | 72.697–84.364 | 80.000 | 31.051 | 5 |
| tiny-10000 / persistent / node | 30.016 | 32.483 | 27.179–32.483 | 40.000 | 61.500 | 5 |
| tiny-10000 / persistent / bun | 24.363 | 25.663 | 23.155–25.663 | 40.000 | 36.625 | 5 |
| tiny-10000 / persistent / go | 17.781 | 20.176 | 15.470–20.176 | 30.000 | 7.500 | 5 |
| fan-10 / persistent / nift | 3.423 | 3.922 | 3.005–4.153 | 0.000 | 6.500 | 50 |
| fan-10 / persistent / python | 1.139 | 1.482 | 0.992–1.627 | 0.000 | 20.074 | 50 |
| fan-10 / persistent / node | 2.169 | 2.703 | 1.882–3.176 | 0.000 | 48.422 | 50 |
| fan-10 / persistent / bun | 10.309 | 10.929 | 9.612–12.891 | 10.000 | 20.375 | 50 |
| fan-10 / persistent / go | 1.017 | 1.245 | 0.809–1.640 | 0.000 | 2.750 | 50 |
| fan-100 / persistent / nift | 15.317 | 22.953 | 12.126–24.104 | 40.000 | 8.250 | 50 |
| fan-100 / persistent / python | 1.727 | 2.029 | 1.565–2.136 | 0.000 | 20.074 | 50 |
| fan-100 / persistent / node | 2.527 | 2.874 | 2.137–3.674 | 0.000 | 48.500 | 50 |
| fan-100 / persistent / bun | 11.168 | 12.627 | 10.367–15.322 | 10.000 | 20.375 | 50 |
| fan-100 / persistent / go | 1.301 | 1.897 | 1.070–1.969 | 0.000 | 2.750 | 50 |
| fan-1000 / persistent / nift | 326.726 | 394.817 | 199.752–400.031 | 685.000 | 9.377 | 50 |
| fan-1000 / persistent / python | 8.551 | 10.044 | 7.820–11.972 | 10.000 | 21.824 | 50 |
| fan-1000 / persistent / node | 7.106 | 10.249 | 5.552–11.608 | 10.000 | 50.461 | 50 |
| fan-1000 / persistent / bun | 12.730 | 16.894 | 11.755–17.848 | 20.000 | 26.500 | 50 |
| fan-1000 / persistent / go | 3.012 | 3.583 | 2.409–4.596 | 0.000 | 2.750 | 50 |
| wait-100 / persistent / nift | 259.228 | 260.469 | 258.489–261.118 | 30.000 | 10.250 | 20 |
| wait-100 / persistent / python | 14.071 | 14.666 | 13.578–14.979 | 0.000 | 21.074 | 20 |
| wait-100 / persistent / node | 13.246 | 13.774 | 12.571–17.626 | 10.000 | 49.750 | 20 |
| wait-100 / persistent / bun | 21.208 | 23.430 | 20.540–25.199 | 15.000 | 24.875 | 20 |
| wait-100 / persistent / go | 11.983 | 12.384 | 11.466–12.396 | 0.000 | 3.125 | 20 |
| wait-1000 / persistent / nift | 2,579.520 | 2,611.718 | 2,572.338–2,644.203 | 550.000 | 141.250 | 20 |
| wait-1000 / persistent / python | 19.895 | 22.724 | 19.337–23.380 | 10.000 | 22.574 | 20 |
| wait-1000 / persistent / node | 19.883 | 23.126 | 17.827–24.442 | 20.000 | 53.252 | 20 |
| wait-1000 / persistent / bun | 23.001 | 23.831 | 21.808–24.094 | 20.000 | 27.500 | 20 |
| wait-1000 / persistent / go | 14.699 | 15.413 | 13.904–16.001 | 0.000 | 5.500 | 20 |
| stagger-100 / persistent / nift | 279.978 | 280.743 | 279.059–281.071 | 30.000 | 10.250 | 20 |
| stagger-100 / persistent / python | 24.250 | 24.931 | 23.103–28.065 | 0.000 | 21.074 | 20 |
| stagger-100 / persistent / node | 22.569 | 23.496 | 21.222–23.733 | 10.000 | 49.750 | 20 |
| stagger-100 / persistent / bun | 31.034 | 31.417 | 30.599–31.816 | 10.000 | 25.750 | 20 |
| stagger-100 / persistent / go | 22.084 | 22.879 | 21.172–22.908 | 0.000 | 3.062 | 20 |
| mixed-wait-100 / persistent / nift | 89.301 | 90.949 | 88.350–92.522 | 25.000 | 10.125 | 20 |
| mixed-wait-100 / persistent / python | 23.770 | 24.328 | 23.505–24.455 | 0.000 | 21.074 | 20 |
| mixed-wait-100 / persistent / node | 22.950 | 23.426 | 21.898–23.507 | 0.000 | 49.750 | 20 |
| mixed-wait-100 / persistent / bun | 30.905 | 33.715 | 30.166–35.959 | 15.000 | 25.875 | 20 |
| mixed-wait-100 / persistent / go | 21.560 | 21.973 | 21.381–22.260 | 0.000 | 3.000 | 20 |
| pool-light-1 / persistent / nift | 22.009 | 30.645 | 21.086–32.826 | 20.000 | 7.125 | 20 |
| pool-light-1 / persistent / python | 109.794 | 115.628 | 103.884–126.068 | 110.000 | 58.145 | 20 |
| pool-light-1 / persistent / node | 53.991 | 58.419 | 51.068–64.774 | 60.000 | 65.250 | 20 |
| pool-light-1 / persistent / bun | 37.155 | 39.198 | 34.973–39.867 | 40.000 | 31.750 | 20 |
| pool-light-1 / persistent / go | 0.986 | 1.145 | 0.909–1.238 | 0.000 | 2.750 | 20 |
| pool-light-2 / persistent / nift | 13.016 | 16.655 | 12.145–17.899 | 20.000 | 7.125 | 20 |
| pool-light-2 / persistent / python | 112.365 | 125.780 | 105.431–126.768 | 205.000 | 79.717 | 20 |
| pool-light-2 / persistent / node | 55.025 | 59.128 | 53.449–63.972 | 110.000 | 77.496 | 20 |
| pool-light-2 / persistent / bun | 41.548 | 45.077 | 37.939–45.803 | 80.000 | 36.863 | 20 |
| pool-light-2 / persistent / go | 1.159 | 1.441 | 0.961–1.483 | 0.000 | 2.750 | 20 |
| pool-light-4 / persistent / nift | 7.999 | 8.991 | 7.737–9.122 | 20.000 | 7.625 | 20 |
| pool-light-4 / persistent / python | 128.447 | 143.612 | 115.257–154.543 | 380.000 | 121.566 | 20 |
| pool-light-4 / persistent / node | 66.246 | 75.797 | 61.731–78.248 | 210.000 | 100.672 | 20 |
| pool-light-4 / persistent / bun | 47.611 | 52.577 | 44.250–55.048 | 140.000 | 46.357 | 20 |
| pool-light-4 / persistent / go | 1.228 | 1.445 | 1.063–1.450 | 0.000 | 2.688 | 20 |
| pool-medium-1 / persistent / nift | 32.585 | 34.357 | 31.357–34.543 | 30.000 | 7.125 | 20 |
| pool-medium-1 / persistent / python | 107.729 | 120.888 | 99.768–128.810 | 110.000 | 58.146 | 20 |
| pool-medium-1 / persistent / node | 57.328 | 63.284 | 50.930–65.566 | 60.000 | 65.375 | 20 |
| pool-medium-1 / persistent / bun | 37.708 | 49.026 | 35.940–50.904 | 40.000 | 33.500 | 20 |
| pool-medium-1 / persistent / go | 1.160 | 1.415 | 0.883–1.456 | 0.000 | 2.750 | 20 |
| pool-medium-2 / persistent / nift | 18.445 | 20.904 | 17.276–26.186 | 30.000 | 7.250 | 20 |
| pool-medium-2 / persistent / python | 117.173 | 129.173 | 106.245–133.464 | 210.000 | 79.596 | 20 |
| pool-medium-2 / persistent / node | 56.278 | 64.685 | 52.990–68.391 | 120.000 | 77.336 | 20 |
| pool-medium-2 / persistent / bun | 41.672 | 48.378 | 38.385–53.060 | 80.000 | 38.482 | 20 |
| pool-medium-2 / persistent / go | 1.224 | 1.534 | 0.905–1.565 | 0.000 | 2.750 | 20 |
| pool-medium-4 / persistent / nift | 11.229 | 13.869 | 10.367–21.121 | 30.000 | 7.625 | 20 |
| pool-medium-4 / persistent / python | 130.966 | 195.323 | 119.328–199.977 | 380.000 | 121.361 | 20 |
| pool-medium-4 / persistent / node | 69.215 | 92.011 | 61.627–126.106 | 220.000 | 101.234 | 20 |
| pool-medium-4 / persistent / bun | 51.931 | 59.462 | 45.787–71.927 | 140.000 | 48.441 | 20 |
| pool-medium-4 / persistent / go | 1.273 | 1.674 | 1.033–1.734 | 0.000 | 2.750 | 20 |
| pool-heavy-1 / persistent / nift | 292.299 | 308.658 | 284.114–308.658 | 290.000 | 7.125 | 10 |
| pool-heavy-1 / persistent / python | 155.070 | 164.330 | 147.453–164.330 | 160.000 | 58.207 | 10 |
| pool-heavy-1 / persistent / node | 62.232 | 71.419 | 58.287–71.419 | 70.000 | 71.148 | 10 |
| pool-heavy-1 / persistent / bun | 50.323 | 57.344 | 47.152–57.344 | 60.000 | 35.750 | 10 |
| pool-heavy-1 / persistent / go | 2.418 | 2.825 | 2.182–2.825 | 0.000 | 2.750 | 10 |
| pool-heavy-2 / persistent / nift | 150.488 | 173.097 | 147.124–173.097 | 290.000 | 7.375 | 10 |
| pool-heavy-2 / persistent / python | 136.793 | 182.197 | 130.222–182.197 | 250.000 | 79.836 | 10 |
| pool-heavy-2 / persistent / node | 63.350 | 71.670 | 58.102–71.670 | 130.000 | 84.047 | 10 |
| pool-heavy-2 / persistent / bun | 47.970 | 52.380 | 44.291–52.380 | 90.000 | 41.047 | 10 |
| pool-heavy-2 / persistent / go | 1.922 | 2.206 | 1.770–2.206 | 0.000 | 2.750 | 10 |
| pool-heavy-4 / persistent / nift | 79.305 | 92.642 | 77.149–92.642 | 290.000 | 7.750 | 10 |
| pool-heavy-4 / persistent / python | 139.645 | 172.677 | 133.359–172.677 | 435.000 | 122.852 | 10 |
| pool-heavy-4 / persistent / node | 72.620 | 85.535 | 66.994–85.535 | 235.000 | 108.734 | 10 |
| pool-heavy-4 / persistent / bun | 51.681 | 54.705 | 48.851–54.705 | 150.000 | 50.449 | 10 |
| pool-heavy-4 / persistent / go | 1.870 | 2.095 | 1.635–2.095 | 0.000 | 2.688 | 10 |
| cpu-1 / persistent / nift | 10,913.016 | 11,126.190 | 10,853.880–11,126.190 | 10,910.000 | 7.125 | 5 |
| cpu-1 / persistent / python | 2,017.077 | 2,065.299 | 2,002.683–2,065.299 | 2,030.000 | 58.266 | 5 |
| cpu-1 / persistent / node | 302.906 | 309.470 | 292.300–309.470 | 310.000 | 71.250 | 5 |
| cpu-1 / persistent / bun | 408.384 | 415.612 | 398.572–415.612 | 420.000 | 38.605 | 5 |
| cpu-1 / persistent / go | 52.855 | 53.220 | 52.791–53.220 | 50.000 | 3.125 | 5 |
| cpu-2 / persistent / nift | 5,409.673 | 5,604.913 | 5,306.893–5,604.913 | 10,770.000 | 7.250 | 5 |
| cpu-2 / persistent / python | 1,085.507 | 1,118.000 | 1,072.490–1,118.000 | 2,130.000 | 79.711 | 5 |
| cpu-2 / persistent / node | 187.179 | 190.794 | 172.516–190.794 | 390.000 | 84.250 | 5 |
| cpu-2 / persistent / bun | 224.621 | 231.140 | 222.581–231.140 | 450.000 | 41.984 | 5 |
| cpu-2 / persistent / go | 27.516 | 29.426 | 27.247–29.426 | 50.000 | 3.125 | 5 |
| cpu-4 / persistent / nift | 2,866.414 | 2,970.577 | 2,822.011–2,970.577 | 11,040.000 | 7.750 | 5 |
| cpu-4 / persistent / python | 650.775 | 938.582 | 627.307–938.582 | 2,380.000 | 122.859 | 5 |
| cpu-4 / persistent / node | 138.874 | 143.703 | 129.181–143.703 | 500.000 | 110.297 | 5 |
| cpu-4 / persistent / bun | 151.449 | 156.104 | 148.016–156.104 | 530.000 | 50.590 | 5 |
| cpu-4 / persistent / go | 15.379 | 16.539 | 15.216–16.539 | 50.000 | 3.125 | 5 |
| process-10 / persistent / nift | 12.219 | 24.974 | 10.539–24.974 | 10.000 | 8.562 | 10 |
| process-10 / persistent / python | 15.736 | 27.411 | 13.563–27.411 | 15.000 | 22.637 | 10 |
| process-10 / persistent / node | 29.721 | 54.431 | 25.810–54.431 | 35.000 | 50.734 | 10 |
| process-10 / persistent / bun | 22.508 | 29.328 | 21.032–29.328 | 25.000 | 25.438 | 10 |
| process-10 / persistent / go | 5.103 | 11.634 | 4.545–11.634 | 0.000 | 2.750 | 10 |
| process-100 / persistent / nift | 96.926 | 100.229 | 89.210–100.229 | 270.000 | 11.469 | 10 |
| process-100 / persistent / python | 59.507 | 67.061 | 56.220–67.061 | 140.000 | 44.020 | 10 |
| process-100 / persistent / node | 186.840 | 197.475 | 173.324–197.475 | 270.000 | 54.609 | 10 |
| process-100 / persistent / bun | 80.517 | 83.986 | 71.314–83.986 | 170.000 | 39.812 | 10 |
| process-100 / persistent / go | 37.541 | 42.155 | 33.348–42.155 | 100.000 | 8.375 | 10 |
| process-1000 / persistent / nift | 1,001.112 | 1,055.305 | 930.875–1,055.305 | 2,955.000 | 13.422 | 10 |
| process-1000 / persistent / python | 473.958 | 515.893 | 450.002–515.893 | 1,350.000 | 70.535 | 10 |
| process-1000 / persistent / node | 1,799.078 | 2,188.790 | 1,718.593–2,188.790 | 2,630.000 | 76.943 | 10 |
| process-1000 / persistent / bun | 474.508 | 493.661 | 456.300–493.661 | 1,215.000 | 99.523 | 10 |
| process-1000 / persistent / go | 336.399 | 342.545 | 309.374–342.545 | 1,055.000 | 24.562 | 10 |
| process-mixed / persistent / nift | 119.138 | 122.000 | 115.667–122.000 | 225.000 | 12.383 | 10 |
| process-mixed / persistent / python | 92.138 | 93.104 | 89.813–93.104 | 120.000 | 26.076 | 10 |
| process-mixed / persistent / node | 195.111 | 205.330 | 179.340–205.330 | 275.000 | 55.898 | 10 |
| process-mixed / persistent / bun | 101.676 | 105.232 | 99.453–105.232 | 170.000 | 41.426 | 10 |
| process-mixed / persistent / go | 79.699 | 84.402 | 78.733–84.402 | 105.000 | 8.938 | 10 |
| process-one-failure / persistent / nift | 99.520 | 112.200 | 90.292–112.200 | 275.000 | 10.863 | 10 |
| process-one-failure / persistent / python | 60.143 | 63.153 | 56.372–63.153 | 140.000 | 44.773 | 10 |
| process-one-failure / persistent / node | 198.760 | 214.717 | 176.166–214.717 | 280.000 | 54.750 | 10 |
| process-one-failure / persistent / bun | 78.627 | 84.177 | 72.608–84.177 | 165.000 | 42.375 | 10 |
| process-one-failure / persistent / go | 37.004 | 40.349 | 34.648–40.349 | 95.000 | 6.812 | 10 |
| process-many-failures / persistent / nift | 90.312 | 101.063 | 87.575–101.063 | 250.000 | 10.961 | 10 |
| process-many-failures / persistent / python | 54.818 | 59.052 | 49.158–59.052 | 125.000 | 44.523 | 10 |
| process-many-failures / persistent / node | 167.992 | 183.484 | 156.011–183.484 | 250.000 | 54.562 | 10 |
| process-many-failures / persistent / bun | 78.885 | 84.446 | 68.872–84.446 | 165.000 | 49.625 | 10 |
| process-many-failures / persistent / go | 35.990 | 41.326 | 33.765–41.326 | 90.000 | 7.625 | 10 |
| files-100 / persistent / nift | 22.697 | 31.557 | 16.554–31.557 | 75.000 | 8.125 | 10 |
| files-100 / persistent / python | 20.172 | 46.476 | 17.132–46.476 | 25.000 | 21.453 | 10 |
| files-100 / persistent / node | 16.875 | 53.041 | 12.159–53.041 | 30.000 | 51.125 | 10 |
| files-100 / persistent / bun | 15.210 | 46.725 | 13.717–46.725 | 25.000 | 25.375 | 10 |
| files-100 / persistent / go | 1.960 | 3.992 | 1.650–3.992 | 0.000 | 2.750 | 10 |
| files-1000 / persistent / nift | 145.382 | 172.385 | 141.849–172.385 | 550.000 | 9.812 | 10 |
| files-1000 / persistent / python | 107.014 | 116.627 | 96.576–116.627 | 170.000 | 23.326 | 10 |
| files-1000 / persistent / node | 78.292 | 88.303 | 71.766–88.303 | 150.000 | 53.586 | 10 |
| files-1000 / persistent / bun | 27.755 | 29.086 | 26.642–29.086 | 55.000 | 34.625 | 10 |
| files-1000 / persistent / go | 7.999 | 9.438 | 7.691–9.438 | 15.000 | 3.875 | 10 |
| files-10000 / persistent / nift | 1,446.824 | 1,502.976 | 1,406.159–1,502.976 | 5,595.000 | 35.262 | 10 |
| files-10000 / persistent / python | 1,035.882 | 1,321.203 | 907.461–1,321.203 | 1,610.000 | 41.703 | 10 |
| files-10000 / persistent / node | 707.063 | 757.238 | 644.829–757.238 | 1,400.000 | 64.219 | 10 |
| files-10000 / persistent / bun | 129.665 | 141.434 | 113.127–141.434 | 305.000 | 43.311 | 10 |
| files-10000 / persistent / go | 72.407 | 81.187 | 64.145–81.187 | 175.000 | 8.383 | 10 |
| queue-1000-1-1 / persistent / nift | 105.574 | 121.044 | 98.912–121.044 | 110.000 | 9.186 | 10 |
| queue-1000-1-1 / persistent / python | 4.953 | 6.780 | 4.697–6.780 | 10.000 | 20.078 | 10 |
| queue-1000-1-1 / persistent / node | 5.448 | 8.817 | 4.769–8.817 | 10.000 | 48.422 | 10 |
| queue-1000-1-1 / persistent / bun | 12.053 | 12.617 | 10.874–12.617 | 20.000 | 20.375 | 10 |
| queue-1000-1-1 / persistent / go | 2.156 | 2.414 | 1.807–2.414 | 0.000 | 2.750 | 10 |
| queue-1000-1-4 / persistent / nift | 118.631 | 133.516 | 115.411–133.516 | 140.000 | 9.312 | 10 |
| queue-1000-1-4 / persistent / python | 7.104 | 9.205 | 6.586–9.205 | 10.000 | 20.324 | 10 |
| queue-1000-1-4 / persistent / node | 5.615 | 9.393 | 4.787–9.393 | 10.000 | 48.461 | 10 |
| queue-1000-1-4 / persistent / bun | 12.549 | 13.057 | 11.597–13.057 | 20.000 | 20.375 | 10 |
| queue-1000-1-4 / persistent / go | 2.094 | 2.300 | 1.956–2.300 | 0.000 | 2.750 | 10 |
| queue-1000-4-1 / persistent / nift | 120.960 | 128.278 | 111.347–128.278 | 140.000 | 9.621 | 10 |
| queue-1000-4-1 / persistent / python | 6.785 | 8.076 | 5.909–8.076 | 10.000 | 20.387 | 10 |
| queue-1000-4-1 / persistent / node | 5.266 | 8.254 | 4.999–8.254 | 10.000 | 48.500 | 10 |
| queue-1000-4-1 / persistent / bun | 12.455 | 13.783 | 11.899–13.783 | 20.000 | 21.438 | 10 |
| queue-1000-4-1 / persistent / go | 2.144 | 2.561 | 1.846–2.561 | 0.000 | 2.750 | 10 |
| queue-1000-4-4 / persistent / nift | 120.439 | 124.115 | 115.310–124.115 | 140.000 | 9.812 | 10 |
| queue-1000-4-4 / persistent / python | 7.240 | 10.375 | 6.678–10.375 | 10.000 | 20.326 | 10 |
| queue-1000-4-4 / persistent / node | 5.376 | 9.179 | 4.938–9.179 | 5.000 | 48.609 | 10 |
| queue-1000-4-4 / persistent / bun | 12.105 | 12.825 | 11.474–12.825 | 15.000 | 23.500 | 10 |
| queue-1000-4-4 / persistent / go | 2.123 | 2.608 | 1.983–2.608 | 0.000 | 2.750 | 10 |
| queue-10000-1-1 / persistent / nift | 1,060.808 | 1,109.695 | 979.363–1,109.695 | 1,220.000 | 25.500 | 10 |
| queue-10000-1-1 / persistent / python | 30.569 | 34.318 | 24.349–34.318 | 30.000 | 21.703 | 10 |
| queue-10000-1-1 / persistent / node | 16.603 | 18.499 | 12.542–18.499 | 20.000 | 54.023 | 10 |
| queue-10000-1-1 / persistent / bun | 16.445 | 19.102 | 15.703–19.102 | 30.000 | 27.438 | 10 |
| queue-10000-1-1 / persistent / go | 12.050 | 12.454 | 11.527–12.454 | 0.000 | 5.750 | 10 |
| queue-10000-1-4 / persistent / nift | 1,125.621 | 1,413.172 | 1,078.251–1,413.172 | 1,355.000 | 24.998 | 10 |
| queue-10000-1-4 / persistent / python | 41.689 | 49.347 | 37.193–49.347 | 50.000 | 21.764 | 10 |
| queue-10000-1-4 / persistent / node | 17.818 | 22.043 | 15.770–22.043 | 30.000 | 56.000 | 10 |
| queue-10000-1-4 / persistent / bun | 20.450 | 31.363 | 19.251–31.363 | 40.000 | 38.312 | 10 |
| queue-10000-1-4 / persistent / go | 12.902 | 16.437 | 11.232–16.437 | 10.000 | 5.562 | 10 |
| queue-10000-4-1 / persistent / nift | 1,122.098 | 1,169.704 | 1,083.986–1,169.704 | 1,325.000 | 25.746 | 10 |
| queue-10000-4-1 / persistent / python | 37.885 | 42.874 | 31.880–42.874 | 40.000 | 21.766 | 10 |
| queue-10000-4-1 / persistent / node | 17.093 | 19.872 | 14.442–19.872 | 20.000 | 55.023 | 10 |
| queue-10000-4-1 / persistent / bun | 19.195 | 23.794 | 16.783–23.794 | 40.000 | 34.438 | 10 |
| queue-10000-4-1 / persistent / go | 12.204 | 13.137 | 11.622–13.137 | 10.000 | 5.625 | 10 |
| queue-10000-4-4 / persistent / nift | 1,166.092 | 1,240.326 | 1,098.346–1,240.326 | 1,420.000 | 25.398 | 10 |
| queue-10000-4-4 / persistent / python | 40.044 | 46.891 | 33.779–46.891 | 40.000 | 21.703 | 10 |
| queue-10000-4-4 / persistent / node | 14.983 | 18.295 | 12.383–18.295 | 20.000 | 54.270 | 10 |
| queue-10000-4-4 / persistent / bun | 17.052 | 18.228 | 15.885–18.228 | 40.000 | 27.500 | 10 |
| queue-10000-4-4 / persistent / go | 12.592 | 14.706 | 12.135–14.706 | 10.000 | 5.375 | 10 |
| queue-100000-1-1 / persistent / nift | 10,500.562 | 10,619.020 | 10,365.145–10,619.020 | 12,030.000 | 179.016 | 5 |
| queue-100000-1-1 / persistent / python | 285.336 | 375.049 | 275.786–375.049 | 310.000 | 36.992 | 5 |
| queue-100000-1-1 / persistent / node | 99.492 | 140.806 | 91.072–140.806 | 140.000 | 84.793 | 5 |
| queue-100000-1-1 / persistent / bun | 61.343 | 64.709 | 58.938–64.709 | 100.000 | 48.875 | 5 |
| queue-100000-1-1 / persistent / go | 120.992 | 133.807 | 115.733–133.807 | 140.000 | 24.125 | 5 |
| queue-100000-1-4 / persistent / nift | 11,340.787 | 13,306.039 | 11,148.042–13,306.039 | 13,660.000 | 177.766 | 5 |
| queue-100000-1-4 / persistent / python | 372.335 | 396.353 | 362.096–396.353 | 430.000 | 37.219 | 5 |
| queue-100000-1-4 / persistent / node | 121.648 | 131.928 | 114.687–131.928 | 190.000 | 87.855 | 5 |
| queue-100000-1-4 / persistent / bun | 76.733 | 82.457 | 70.758–82.457 | 100.000 | 49.625 | 5 |
| queue-100000-1-4 / persistent / go | 130.400 | 133.893 | 126.887–133.893 | 170.000 | 22.625 | 5 |
| queue-100000-4-1 / persistent / nift | 11,683.553 | 11,832.717 | 11,302.943–11,832.717 | 13,750.000 | 179.391 | 5 |
| queue-100000-4-1 / persistent / python | 360.643 | 367.578 | 354.242–367.578 | 410.000 | 36.922 | 5 |
| queue-100000-4-1 / persistent / node | 110.517 | 113.694 | 105.254–113.694 | 160.000 | 86.391 | 5 |
| queue-100000-4-1 / persistent / bun | 70.811 | 73.939 | 66.464–73.939 | 100.000 | 49.375 | 5 |
| queue-100000-4-1 / persistent / go | 125.403 | 127.799 | 118.791–127.799 | 150.000 | 20.219 | 5 |
| queue-100000-4-4 / persistent / nift | 11,833.786 | 12,165.599 | 11,260.291–12,165.599 | 14,200.000 | 177.926 | 5 |
| queue-100000-4-4 / persistent / python | 329.767 | 335.653 | 293.886–335.653 | 370.000 | 37.148 | 5 |
| queue-100000-4-4 / persistent / node | 86.246 | 90.430 | 76.237–90.430 | 120.000 | 85.633 | 5 |
| queue-100000-4-4 / persistent / bun | 62.232 | 71.854 | 60.324–71.854 | 100.000 | 49.000 | 5 |
| queue-100000-4-4 / persistent / go | 135.365 | 140.002 | 126.522–140.002 | 180.000 | 21.250 | 5 |
| atomic-1 / persistent / nift | 131.817 | 132.870 | 127.063–132.870 | 130.000 | 6.938 | 10 |
| atomic-1 / persistent / node | 49.534 | 52.396 | 46.357–52.396 | 50.000 | 64.648 | 10 |
| atomic-1 / persistent / bun | 35.116 | 37.195 | 34.166–37.195 | 40.000 | 34.994 | 10 |
| atomic-1 / persistent / go | 0.925 | 1.209 | 0.838–1.209 | 0.000 | 2.750 | 10 |
| mutex-1-1 / persistent / nift | 181.676 | 188.832 | 178.311–188.832 | 180.000 | 7.000 | 10 |
| mutex-1-1 / persistent / python | 3.365 | 3.848 | 3.256–3.848 | 5.000 | 20.074 | 10 |
| mutex-1-1 / persistent / go | 1.100 | 1.472 | 0.954–1.472 | 0.000 | 2.750 | 10 |
| mutex-8-1 / persistent / nift | 225.666 | 238.063 | 219.058–238.063 | 220.000 | 6.875 | 10 |
| mutex-8-1 / persistent / python | 5.220 | 6.437 | 5.049–6.437 | 10.000 | 20.076 | 10 |
| mutex-8-1 / persistent / go | 1.131 | 1.366 | 0.963–1.366 | 0.000 | 2.750 | 10 |
| atomic-2 / persistent / nift | 75.267 | 83.805 | 66.235–83.805 | 140.000 | 7.000 | 10 |
| atomic-2 / persistent / node | 51.180 | 63.409 | 49.144–63.409 | 110.000 | 76.688 | 10 |
| atomic-2 / persistent / bun | 37.086 | 48.132 | 34.767–48.132 | 70.000 | 36.682 | 10 |
| atomic-2 / persistent / go | 1.066 | 1.233 | 0.892–1.233 | 0.000 | 2.750 | 10 |
| mutex-1-2 / persistent / nift | 211.752 | 226.592 | 200.061–226.592 | 280.000 | 7.125 | 10 |
| mutex-1-2 / persistent / python | 3.428 | 4.850 | 3.356–4.850 | 5.000 | 20.076 | 10 |
| mutex-1-2 / persistent / go | 1.000 | 1.219 | 0.827–1.219 | 0.000 | 2.750 | 10 |
| mutex-8-2 / persistent / nift | 253.594 | 273.081 | 245.750–273.081 | 325.000 | 7.000 | 10 |
| mutex-8-2 / persistent / python | 5.366 | 5.856 | 5.151–5.856 | 0.000 | 20.074 | 10 |
| mutex-8-2 / persistent / go | 0.963 | 1.330 | 0.841–1.330 | 0.000 | 2.750 | 10 |
| atomic-4 / persistent / nift | 46.155 | 53.816 | 43.168–53.816 | 165.000 | 7.125 | 10 |
| atomic-4 / persistent / node | 64.564 | 71.564 | 62.507–71.564 | 210.000 | 100.102 | 10 |
| atomic-4 / persistent / bun | 46.138 | 51.637 | 43.506–51.637 | 130.000 | 46.650 | 10 |
| atomic-4 / persistent / go | 1.096 | 1.351 | 0.981–1.351 | 0.000 | 2.625 | 10 |
| mutex-1-4 / persistent / nift | 221.810 | 238.178 | 220.052–238.178 | 310.000 | 7.125 | 10 |
| mutex-1-4 / persistent / python | 4.092 | 4.514 | 3.855–4.514 | 0.000 | 20.074 | 10 |
| mutex-1-4 / persistent / go | 1.065 | 1.149 | 0.974–1.149 | 0.000 | 2.750 | 10 |
| mutex-8-4 / persistent / nift | 275.163 | 294.169 | 257.335–294.169 | 365.000 | 7.250 | 10 |
| mutex-8-4 / persistent / python | 6.144 | 6.524 | 5.747–6.524 | 0.000 | 20.141 | 10 |
| mutex-8-4 / persistent / go | 1.160 | 1.794 | 0.998–1.794 | 0.000 | 2.750 | 10 |
| failures / persistent / nift | 3.613 | 4.110 | 3.154–4.110 | 0.000 | 6.500 | 10 |
| failures / persistent / python | 1.369 | 1.524 | 1.010–1.524 | 0.000 | 20.076 | 10 |
| failures / persistent / node | 2.301 | 2.786 | 2.063–2.786 | 0.000 | 48.461 | 10 |
| failures / persistent / bun | 10.564 | 11.921 | 9.806–11.921 | 15.000 | 20.375 | 10 |
| failures / persistent / go | 1.123 | 1.576 | 0.927–1.576 | 0.000 | 2.750 | 10 |
| mixed-64 / persistent / nift | 93.279 | 98.617 | 86.714–98.617 | 180.000 | 11.020 | 10 |
| mixed-64 / persistent / python | 62.732 | 64.337 | 60.469–64.337 | 80.000 | 42.711 | 10 |
| mixed-64 / persistent / node | 152.317 | 161.740 | 136.315–161.740 | 175.000 | 54.273 | 10 |
| mixed-64 / persistent / bun | 76.427 | 79.204 | 70.597–79.204 | 110.000 | 36.438 | 10 |
| mixed-64 / persistent / go | 58.540 | 59.692 | 56.166–59.692 | 55.000 | 6.812 | 10 |
| nested-10 / persistent / nift | 7.498 | 8.078 | 7.124–8.381 | 10.000 | 8.625 | 20 |
| nested-10 / persistent / python | 1.395 | 1.618 | 1.302–1.639 | 0.000 | 20.076 | 20 |
| nested-10 / persistent / node | 2.056 | 2.475 | 1.894–7.105 | 0.000 | 48.500 | 20 |
| nested-10 / persistent / bun | 10.497 | 10.676 | 9.822–11.013 | 10.000 | 20.375 | 20 |
| nested-10 / persistent / go | 1.045 | 1.210 | 0.902–1.332 | 0.000 | 2.750 | 20 |
| nested-100 / persistent / nift | 53.653 | 66.687 | 50.769–67.380 | 180.000 | 23.500 | 20 |
| nested-100 / persistent / python | 5.680 | 6.256 | 5.194–6.576 | 10.000 | 20.074 | 20 |
| nested-100 / persistent / node | 4.181 | 7.054 | 3.364–7.180 | 0.000 | 48.711 | 20 |
| nested-100 / persistent / bun | 10.860 | 11.993 | 10.315–13.452 | 20.000 | 20.375 | 20 |
| nested-100 / persistent / go | 1.855 | 2.172 | 1.571–2.589 | 0.000 | 2.750 | 20 |
| waiting-memory-100 / persistent / nift | 264.027 | 265.521 | 263.323–265.521 | 30.000 | 10.125 | 5 |
| waiting-memory-100 / persistent / python | 14.291 | 14.926 | 13.913–14.926 | 0.000 | 21.199 | 5 |
| waiting-memory-100 / persistent / node | 13.526 | 13.597 | 13.087–13.597 | 0.000 | 49.625 | 5 |
| waiting-memory-100 / persistent / bun | 21.330 | 23.090 | 20.618–23.090 | 20.000 | 23.500 | 5 |
| waiting-memory-100 / persistent / go | 11.964 | 12.359 | 11.832–12.359 | 0.000 | 3.000 | 5 |
| waiting-memory-1000 / persistent / nift | 2,796.158 | 2,816.461 | 2,787.095–2,816.461 | 510.000 | 143.875 | 5 |
| waiting-memory-1000 / persistent / python | 22.882 | 23.557 | 22.012–23.557 | 10.000 | 22.578 | 5 |
| waiting-memory-1000 / persistent / node | 19.832 | 21.917 | 17.289–21.917 | 20.000 | 52.625 | 5 |
| waiting-memory-1000 / persistent / bun | 22.715 | 24.367 | 21.835–24.367 | 20.000 | 27.625 | 5 |
| waiting-memory-1000 / persistent / go | 15.211 | 17.075 | 14.905–17.075 | 0.000 | 5.625 | 5 |
| waiting-memory-10000 / persistent / python | 130.915 | 148.072 | 128.988–148.072 | 130.000 | 37.625 | 5 |
| waiting-memory-10000 / persistent / node | 57.547 | 60.614 | 55.003–60.614 | 80.000 | 74.359 | 5 |
| waiting-memory-10000 / persistent / bun | 30.144 | 36.170 | 29.112–36.170 | 40.000 | 36.500 | 5 |
| waiting-memory-10000 / persistent / go | 58.753 | 68.519 | 56.339–68.519 | 120.000 | 32.875 | 5 |
p95 uses nearest rank; with five samples it equals the maximum and is descriptive. 5ms tree sampling can miss short-lived processes and double-count shared mappings. CPU ticks limit short-request precision. Held tree RSS is a separate metric. Fresh distributions, maximum-individual-process RSS and process/thread counts remain in canonical evidence.
Implementation contracts
| Runtime | Queue / sharing | Cancellation / lifetime |
|---|---|---|
| Nift | Mutex ring + polling; snapshot ordinary captures; transferable typed atomic/mutex handles | Explicit join/await; cooperative atomic stop; no public future cancel found |
| Python | queue.Queue; threading.Lock; spawn-process CPU pool | asyncio cancel; executor context cleanup; a running process needs separate policy |
| Node / Bun | Cooperative promise queue; worker isolates; SAB atomics; no native mutex cell | AbortSignal where supported; worker termination is separate from promise rejection |
| Go | Buffered channel; sync.Mutex; atomic values | Context stop signals; WaitGroup and channel close remain explicit |
All timed failure cases collect every outcome and allow successful siblings to finish. Separate cancellation probes verify each model, not an identical fail-fast contract. Worker-limit probes validate 1/2/4 active workers; Python uses distinct worker processes. Exact commands and adapter sources are retained in the experiment.
AI-DX / qualitative judgment
Human + agent: Go for standalone high fan-out/CPU concurrency; Nift for bounded orchestration already in a Nift project. Agent-primary: the same conditional choices. Explicit captures, typed handles and join/await help an agent inspect ownership, but they do not erase the measured throughput gaps or retained-runtime slowdown.
Exact output/error and worker-limit contracts were audited. Autonomous authoring success, race repair and recovery productivity were not measured. Harness JSON is not product-native structured feedback. Prefer concise helpers preserving explicit contracts over duplicated metadata; that is design judgment, not a timing result.
Large scheduling and queue-throughput deficits remain visible in the current peer comparisons. Node/Bun remain natural choices for an existing JS async application; networking capacity was not tested.
Frozen method / public evidence
One fresh four-vCPU / 8 GiB Ubuntu 24.04 Linode; AMD EPYC 7642; affinity 0–3.
Fresh: start → complete work → capture → exit. Booted isolated request: a new runtime reaches boot-ready before each observation → one request → full response. Startup and exit stay outside that timer; request state is equally isolated for every participant. This does not measure steady-state repeated-request throughput. The booted request includes IPC, serialization and worker-pool setup; it is not engine-only throughput. Workload-sensitive 5–50 samples, two retained warmups, rotated participant order, all four CPUs, no outlier deletion. Every observation passed exact count/value/hash/exit checks and an independent audit.
Nift 4.12.0 final candidate · Python 3.14.4 ordinary GIL · Node 24.21.0 · Bun 1.4.3 · Go 1.27.2
Nift source: c14d06835bca515a5281e41da0e40219c2d60ef0
Measured suite: d6d0cac9e7dd65d12b5bbccd0ec5b542d187c0a6
Accepted evidence: 19e390183b9bcb039abe6aa553ad88a2305b49ee
Raw observations, warmups, semantic traces, environment and audit ↗ · Complete boundaries and commands ↗ · Practitioner review ↗
Filesystem cache state was not reset. Shared cloud CPUs can vary. Five runtimes solve equivalent problems with explicit model differences; these measurements certify this suite, not universal production capacity.