Pony 0.21.1 is a recommended update. It fixes a stability edge-case where memory usage could climb out of control when a large number of scheduler threads were used when there was very little work to be done.
Dynamic scheduler thread scaling based on workload
Before Pony 0.21.1, the runtime would start up a specific number of scheduler threads on initialization; by default the same as the number of physical cores. These scheduler threads would run actors and send block/unblock messages and steal actors from each other regardless of how many actors and what the workload of the program was. This usually resulted in wasted CPU cycles and cache thrashing if there wasn’t enough work to keep all scheduler threads busy.
With the introduction of dynamic scheduler thread scaling, the runtime still starts up the threads on initialization, but now the threads can suspend execution if there isn’t enough work to do to minimize the work stealing overhead.