Optimization adventures: making a parallel Rust workload even faster with data-oriented design (and other tricks)

This post is the second part of my adventures to optimize a Rust workload running on multiple threads. In the first post, I explored how the rayon parallelism framework works, and explained how I designed a faster replacement for my use case.