Recently I added a number of features to my Workers gem:
The Task and TaskGroup classes make it even easier to parallelize expensive computations (and blocking IO operations) using background threads. They build on top of worker pools and standardize on various features such as success/failure handling, delayed execution, and arguments.
Parallel Map is syntactic sugar built on top of tasks and task groups. It works very similar to Ruby's standard Array#map method except each element is mapped in parallel.
Pools are now dynamically resizable. The long term vision for this feature is to experiment with auto-resizing algorithms that adapt to an applications load. In the short term it is mostly useful for quickly changing the size of the default pool (currently set to 20 workers) without having to create a new one.