Benchmarks
What BetterMultiThreaded measured on our own servers, and exactly how each number was taken.
Every number on this page comes from our own servers: /tps and spark profiles on the live network, plus stress runs with 150–200 bots on a copy of the live map. “Folia” in the tables means the same build with sharding switched off, so the only thing that changes is the threading.
One crowded region
151 players and about 7,400 entities inside one contiguous area of 18,200 chunks. Same Ryzen 9 9950X, same bots, same map copy.
| Folia | BetterMultiThreaded | |
|---|---|---|
| MSPT (lower is better) | 90.2 ms | 14.6–15.4 ms |
| TPS (higher is better) | ~11 | 20.00 |
- 6× shorter ticks on the same load.
- About 0.7 of a core of extra CPU for that speed-up. Idle workers park instead of spinning.
- 0 watchdog warnings and 0 player disconnects during the run.
Small area to large map
MSPT as reported by /tps.
| Scenario | Load | Folia | BetterMultiThreaded | Speed-up |
|---|---|---|---|---|
| Packed spawn | 151 players inside a 100-block radius, 648 chunks, ~490 entities | 22.8–25.2 | 15.8 | 1.5× |
| Spread-out town | 99 players across 1,100 blocks, ~13,000 chunks, ~1,750 entities | 25.0 | 11.8 | 2.1× |
| Town full of mobs and farms | 151 players, 18,200 chunks, ~7,400 entities | 90.2 | 14.6–15.4 | 6× |
Peak run: about 195 players, 25,000 chunks and 7,500 entities in one region held 15.5–16.7 MSPT and 20.00 TPS in all four runs, with zero errors.
Stability with players on the move
Low MSPT is half the story. Every /warp, /rtp and portal trip makes Folia merge and split regions under a lock that other regions have to wait for. “Before” is our previous build, with Folia-style full splits and no work stealing.
| Measure | Before | BetterMultiThreaded |
|---|---|---|
| Time a region split holds the lock (average) | 118 ms | 14 ms |
| Time a region split holds the lock (worst case) | 153 ms | 29 ms |
| Worst minimum TPS during mass teleports | 17.12 | 19.39 |
| Late tick starts in 200 seconds | 253 | 1 |
| Worst delay of a late tick | 445 ms | 35 ms |
The teleport run used 197 bots and 700 teleports in 4 minutes, measured across every region on the server. The late-tick run had 14 regions sharing 4 threads. Merge and split waves came every 14 seconds: 30 random players scattered 2,600 blocks out, 20 pulled back to spawn.
On the live network
BetterMultiThreaded runs our own Towny network every day. These numbers come from spark profiles and /tps on the live server with 405–410 players online, not from a synthetic benchmark.
| Busiest region | |
|---|---|
| Players | 118 |
| Chunks | 21,500 |
| Entities | 5,600 |
| Region tick | 10.7 ms |
| Serial part | 2.93 ms |
| Tracker | 0.79 ms |
| Shards | 6.97 ms |
The two parallel phases, tracker and shards, did 59.8 ms of work in 7.76 ms of wall time: 7.7× parallel. Only the serial part, 2.93 ms, still runs on a single thread.
The same town ran at about 70 MSPT with 130–140 players when it was still on one thread. At 410 players the whole server used about 13 of 32 hardware threads, on one Ryzen 9 9950X.
How it was measured
- MSPT and TPS are read from
/tps(5-second window) and from spark profiles. - Stress runs used 150–200 bots on a copy of a live Towny map, on a Ryzen 9 9950X, in September 2026.
- “Folia” is the same build with sharding switched off.
- Live numbers come from our production Towny server at 405–410 players online.
Your results depend on your hardware, your plugins and how your players spread out. Use /tps on your own server to see the speed-up of each region.