rayon::join is pretty simple. It takes two closures, potentially runs them in parallel, and returns their returned values in a tuple [25]. Wait a second, did we just say potentially? Isn't it always better to run things in parallel?
Nope, at least not always. Sure, if you really care about things running together at all times without blocking, say a GUI and its underlying I/O where you definitely don't want the mouse cursor to freeze when opening a file, you always need to have all processes running in their own thread. But most applications for concurrency don't have this requirement. A big part of what makes concurrency so important is its ability to run code that would normally run sequentially (that is, one line after another) in parallel if required. Notice the choice of words here—code that would normally run sequentially. These kinds of algorithms do not inherently need concurrency, but they might get a boost out of it. Now comes the potential...